【问题标题】:Qt correct way to show/display/raise windowQt显示/显示/提升窗口的正确方法
【发布时间】:2011-12-10 16:00:11
【问题描述】:

我经常发现我需要展示一个窗口并将其放在前面。例如,当用户尝试重新加载同一个文档时,我只是调出旧文档。为此,我有这样的代码:

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

我开始觉得我缺少一个快捷功能。当然,这种行为很常见。是否有一些首选功能可以完成上述所有工作和/或只在每个目标操作系统上做正确的事情?


注意:我刚刚注意到一个缺陷,因此特殊功能现在更加重要。如果窗口最小化,activateWindow 不起作用。即使您先将上述内容重新排序为showNormal,也会发生这种情况。

【问题讨论】:

  • 是的,我已经阅读了很多文档。每个操作系统的功能都略有不同,因此我需要多次调用。在这种情况下,我的应用程序是当前的顶级窗口,因此它通常可以工作。
  • 听起来像是一个错误,它在 PySide 中对我来说很好用。如果没有重现问题的 SSCCE,很难评估。
  • 确实这似乎是一个错误,activateWindow() 单独对我也有用。你能用更新的 Qt 版本(比如 5.6 或 5.7)来测​​试吗?

标签: c++ qt pyqt4


【解决方案1】:

这是一个有效的“捷径”:

widget->setWindowState(Qt::WindowActive) ;

您可以将它与窗口的最后一个Qt::WindowState 结合使用。 这个符号虽然不是很明确。

【讨论】:

  • 不幸的是 raise()showNormal() - 它们都对我不起作用。但是 setWindowState(Qt::WindowActive) 在我的情况下工作正常。谢谢...
  • 奇怪...这对我不起作用,但 activateWindow() 可以。也许这已在 Qt 5.7 中修复?
【解决方案2】:

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

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

对了,你可以打一次show(),除非你hide()它,没有必要再打一次show()

【讨论】:

  • 这不会恢复已最小化的窗口。
  • 它也没有将焦点放在窗口上。 activateWindowshowNormal 仍然是必需的。
  • @edA-qamort-ora-y 您在问题中没有提到可以最小化窗口
  • 我可以说对showNormal的调用清楚地表明窗口可以最小化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
  • 1970-01-01
相关资源
最近更新 更多