在Qt中,如何使一个窗口成为当前窗口?

13

我的QT应用有多个窗口,有些时候即使这些窗口已经打开但被其他窗口覆盖了,用户仍会从主窗口菜单栏中选择一个选项来打开它。这种情况下,我只想将其提前并使其成为当前窗口。现在,使用QWidget->raise可以将此窗口置于所有其他窗口之上,但它不会选择它,而这正是我需要做的。我尝试了QWidget->setFocus,但它没有任何作用。同时,我正在使用QWidget->close和QWidget->show的组合,但我想知道是否有一个命令可以与->raise一起使用。

我尝试过:

        pMission->raise();
        pMission->setFocus(Qt::ActiveWindowFocusReason);

但它没有起作用,所以我使用了:

        pMission->close();
        pMission->show();

你的意思是“……置于所有其他窗口之上,但它并没有被选中”? - Kaleb Pederson
我的意思是,命令pMission->raise();可以使窗口置于所有其他窗口之上,但它并不成为“当前”窗口。 - yan bellavance
2个回答

15

你曾经尝试过QWidget::activateWindow吗?

根据帮助文件,这个函数将会:

将包含该窗口的顶层窗口设置为活动窗口。 活动窗口是一个可见的、具有键盘输入焦点的顶层窗口。


不确定这是否是新问题或边缘情况,但我们目前在Centos 7上运行Qt5(通过PySide2),如果窗口打开但在另一个窗口后面,则窗口将无法获得焦点。 - Edward Spencer

5
在MacOS Lion上,使用Qt 4.8.0时,只有raise()函数适用于我。activateWindow()和setFocus()无效。
(我没有足够的Karma在Mason的回答下发表评论)

截至Qt 5.3.2,32位,在OS X 10.10 Yosemite中,activateWindow()按照Mason的描述正常工作。 - SexyBeast
activateWindow() 在我的 Mac (M1) QT 6.3 上运行良好。谢谢。 - Tim Seed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接