父模式顶部的无模式Qt窗口,但不在其他应用程序之上

时间:2015-08-26 01:15:06

标签: qt user-interface window

我希望有一个Qt对话窗口:

  1. 始终位于其父级(主应用程序窗口)之上,
  2. 允许用户与父窗口进行交互,
  3. 并不总能保持在其他应用程序之上。
  4. 通过制作对话框模态,我已经能够达到1和3,并且我可以通过使用Qt :: WindowStaysOnTopHint窗口标志来实现1和2。但我无法完成这三项工作 - 是否有可能?

    如果答案是特定于操作系统的,我主要在Mac上工作,但我更喜欢适用于Windows和Linux的解决方案。谢谢!

4 个答案:

答案 0 :(得分:1)

默认的QWidget足以满足您的需求。

如果您使用父窗口创建QWidget,它将位于其他窗口小部件之上。您只需要最后创建它或使用QWidget :: raise()正确堆叠它。

答案 1 :(得分:1)

我知道我已经发布了回答,但我找到了最佳解决方案:

使用QDockWidget。 DockWidget将始终保持在其父级之上,如果将allowedAreas属性设置为Qt::NoDockWidgetArea,则窗口将按您所需的方式运行!

答案 2 :(得分:0)

此窗口将始终位于顶部: self.setWindowFlags(QtCore.Qt.Dialog | QtCore.Qt.WindowStaysOnTopHint)

或者您可以传递现有的标志: self.setWindowFlags( self.windowFlags() | QtCore.Qt.WindowStaysOnTopHint)

答案 3 :(得分:0)

仅当QDialog是使用NULL父级创建的,我才能重现原始问题。否则,以下几行足以满足要求1、2和3。

DiagramView