当用户不使用第二台显示器时,我正在使用 Qt 库在第二台显示器上显示幻灯片。一个示例是用户在第一台显示器中玩游戏并在第二台显示器中显示幻灯片。
问题是当我在 Qt 中打开一个新窗口时,它会自动从以前的应用程序中窃取焦点。有什么办法可以防止这种情况发生吗?
当用户不使用第二台显示器时,我正在使用 Qt 库在第二台显示器上显示幻灯片。一个示例是用户在第一台显示器中玩游戏并在第二台显示器中显示幻灯片。
问题是当我在 Qt 中打开一个新窗口时,它会自动从以前的应用程序中窃取焦点。有什么办法可以防止这种情况发生吗?
我花了一段时间才找到它,但我找到了它:setAttribute(Qt::WA_ShowWithoutActivating);
这会强制窗口不激活。即使有Qt::WindowStaysOnTopHint
国旗
如果你想制作浮动预览框/任何其他小部件,只需在下面使用
thumbnail = new QLabel;
thumbnail->setAttribute(Qt::WA_ShowWithoutActivating);
thumbnail->setParent(0);
thumbnail->setWindowFlags(Qt::Tool | Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint);
Qt::Tool 是使其工作的重要标志。我的意思是不要偷走焦点。
默认情况下,小部件不接受焦点,但大概您还没有创建普通小部件?它是哪个子类?QMainWindow 还是别的什么?
窗口子类可能默认接受焦点,因此在调用 QWidget::show() 之前尝试使用 Qt::NoFocus 显式调用 QWidget::setFocusPolicy。
此外,请确保您在任何时候都没有在窗口或其任何小部件上调用 QWidget::activateWindow() 。