在 Qt 中显示窗口而不窃取焦点
当用户不使用第二台显示器时,我使用 Qt 库在第二台显示器上显示幻灯片。 一个示例是用户在第一个显示器中玩游戏并在第二个显示器中显示幻灯片。
问题是,当我在 Qt 中打开一个新窗口时,它会自动窃取前一个应用程序的焦点。 有什么办法可以防止这种情况发生吗?
I'm using the Qt library to show a slideshow on the second monitor when the user isn't using the second monitor. An example is the user playing a game in the first monitor and showing the slideshow in the second monitor.
The problem is that when I open a new window in Qt, it automatically steals the focus from the previous application. Is there any way to prevent this from happening?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我花了一段时间才找到它,但我找到了它:
setAttribute(Qt::WA_ShowWithoutActivating);
这会强制窗口不激活。 即使使用
Qt::WindowStaysOnTopHint
标志It took me a while to find it but I found it:
setAttribute(Qt::WA_ShowWithoutActivating);
This forces the window not to activate. Even with the
Qt::WindowStaysOnTopHint
flag如果您想制作浮动预览框/任何其他小部件,只需使用下面的
Qt::Tool 是使其工作的重要标志。 我的意思是不抢焦点。
If you want to make floating preview box/ any other widget just use below
Qt::Tool is important flag to make it work. I mean not stealing focus.
默认情况下,小部件不接受焦点,但您可能还没有创建普通的小部件? 它是哪个子类? QMainWindow 还是其他什么?
窗口子类可能默认接受焦点,因此在调用 QWidget::show() 之前尝试使用 Qt::NoFocus 显式调用 QWidget::setFocusPolicy。
另外,请确保您在任何时候都没有在窗口或其任何小部件上调用 QWidget::activateWindow() 。
Widgets don't accept focus by default but presumably you haven't created a plain widget? Which subclass was it? QMainWindow or something else?
It's possible the window subclasses default to accepting focus so try explicitly calling QWidget::setFocusPolicy with Qt::NoFocus before calling QWidget::show().
Also, make sure you're not calling QWidget::activateWindow() on the window or any of its widgets at any point.