Qt正确的方法显示/展示/提升窗口

23

经常需要将一个窗口显示并置于前台。例如,当用户尝试重新加载同一文档时,我只需打开旧的文档即可。我会使用以下代码实现:

widget->raise();
widget->activateWindow();
widget->showNormal();

我开始觉得我缺少一个快捷函数。这种类型的行为肯定很常见。是否有一些首选函数可以完成上述所有操作和/或在每个目标操作系统上都做正确的事情?


注意:我刚刚注意到一个缺陷,因此现在特别重要的是一个特殊的函数。如果窗口最小化,则activateWindow无法工作。即使您将以上内容重新排序为showNormal首先。


是的,我已经仔细阅读了文档。每个操作系统都有些微不同的功能,因此我需要进行多次调用。在这种情况下,我的应用程序是当前顶层窗口,所以通常可以正常工作。 - edA-qa mort-ora-y
1
听起来像是一个 bug,在 PySide 中对我来说运行得很好。没有一个能够重现问题的 SSCCE 很难评估。 - eric
的确看起来像是一个 bug,仅使用 activateWindow() 对我也有效。你能否使用更新的 Qt 版本(比如 5.6 或 5.7)进行测试? - Romário
2个回答

17

这是一个有效的“快捷方式”:

widget->setWindowState(Qt::WindowActive) ;

你可以将其与窗口的最后一个Qt::WindowState组合使用。 虽然这种符号并不是非常明确。


不幸的是,raise()和showNormal()对我都没有起作用。但是setWindowState(Qt::WindowActive)在我的情况下运行良好。谢谢... - Dewsworld
1
奇怪...这对我不起作用,但是activateWindow()可以。也许在Qt 5.7中已经修复了这个问题? - Romário

-3

不需要那么复杂。这就足够了:

widget->raise();
widget->show();

顺便说一下,你可以调用show()一次,除非你调用了hide(),否则不需要再次调用show()


3
这并不能恢复最小化了的窗口。 - edA-qa mort-ora-y
它也不会将焦点放在窗口上。这两个函数activateWindowshowNormal仍然是必需的。 - edA-qa mort-ora-y
@edA-qamort-ora-y,您在问题中没有提到窗口可以最小化。 - BЈовић
2
我可以认为调用 showNormal 是窗口可以最小化的明显指示。 - edA-qa mort-ora-y

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