【问题标题】:How to display a QMessageBox on top of all windows如何在所有窗口顶部显示 QMessageBox
【发布时间】:2014-06-24 03:22:22
【问题描述】:

我创建了一个与应用程序一起全屏运行的程序。我希望我的程序中的 QMessageBox 显示在全屏运行的应用程序之上。

平台是 Windows 7,我使用的是 Qt。

我试过了:

QMessageBox *msgBox = new QMessageBox;
msgBox->setParent(0);
msgBox->setWindowTitle(title);
msgBox->setText(text);
msgBox->setWindowFlags(Qt::WindowStaysOnTopHint);
msgBox->show();

没有运气。有什么提示吗?

【问题讨论】:

  • 您需要使用 exec(),因此请调用:msgBox->exec();
  • 谢谢你,但很遗憾没有用。该窗口停留在当前活动窗口的后面。
  • 然后,将按摩框的父级设置为当前活动窗口。
  • 全屏运行的应用程序不是我的。我可以使用 Qt 将父级设置为活动窗口,还是必须使用 winapi?
  • 是的,你可以。您需要将指针设置为活动窗口,而不是 msgBox->setParent(0); 中的 null。你能得到吗?那个窗口是什么?请提供更多详细信息。

标签: qt dialog qmessagebox


【解决方案1】:

尝试msgBox->raise(); 将在任务栏中通知用户,使用setWindowFlags(Qt::WindowStaysOnTopHint); 你最终可以让它保持在顶部(evtl.minimize/restore)。 但是,不依赖于操作系统的窗口管理器在设计上不应允许任何应用程序仅仅“窃取”另一个应用程序的焦点,因此用户仍然需要激活(单击)您的窗口以获得焦点。

【讨论】:

  • 这很有意义塞巴斯蒂安,不幸的是“raise()”也不起作用。
  • 我很抱歉。我的测试场景中的行为似乎有所不同。您的解决方案确实有效。谢谢。
猜你喜欢
  • 2012-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-20
  • 2017-08-24
  • 2011-05-25
相关资源
最近更新 更多