在Qt中显示窗口而不会窃取焦点

时间:2009-06-08 19:59:55

标签: c++ qt focus window-management active-window

当用户没有使用第二台显示器时,我正在使用Qt库在第二台显示器上显示幻灯片。一个例子是用户在第一个监视器中玩游戏并在第二个监视器中显示幻灯片。

问题是当我在Qt中打开一个新窗口时,它会自动窃取前一个应用程序的焦点。有什么办法可以防止这种情况发生吗?

3 个答案:

答案 0 :(得分:58)

我花了一段时间才找到它,但我找到了它:setAttribute(Qt::WA_ShowWithoutActivating);

这会强制窗口不激活。即使使用Qt::WindowStaysOnTopHint标志

答案 1 :(得分:4)

如果你想制作浮动预览框/任何其他小部件,只需使用下面的

thumbnail = new QLabel;
thumbnail->setAttribute(Qt::WA_ShowWithoutActivating);
thumbnail->setParent(0);
thumbnail->setWindowFlags(Qt::Tool | Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint);

Qt :: Tool是使它工作的重要标志。我的意思是不要偷走焦点。

答案 2 :(得分:3)

小部件默认情况下不接受焦点,但可能是你没有创建一个普通的小部件?它是哪个子类? QMainWindow还是别的什么?

窗口子类可能默认接受焦点,因此在调用QWidget :: show()之前尝试使用Qt :: NoFocus显式调用QWidget :: setFocusPolicy。

此外,请确保您不会在窗口或其任何小部件上随时调用QWidget :: activateWindow()。