Qt 仅将非模态QDialog窗口放置在我的应用程序顶部,而不是所有应用程序的顶部

Qt 仅将非模态QDialog窗口放置在我的应用程序顶部,而不是所有应用程序的顶部,qt,qdialog,Qt,Qdialog,我有一个QDialog窗口,它应该始终位于我的应用程序顶部。它不是模态的。用户可以随时与对话框和主应用程序交互。使用WindowStaysOnTopHint可以在一定程度上实现这一点。但是,该对话框仍然位于所有其他正在运行的应用程序(如记事本、chrome等)的顶部。在应用程序之间不断切换时,这可能会很烦人 我希望QDialog位于我的应用程序之上,而不是其他应用程序之上。任何建议都将不胜感激。正是为此而设计的。可以将其配置为浮动在窗口顶部。确保QDialog的父窗口是您的应用程序窗口。如果它的

我有一个QDialog窗口,它应该始终位于我的应用程序顶部。它不是模态的。用户可以随时与对话框和主应用程序交互。使用WindowStaysOnTopHint可以在一定程度上实现这一点。但是,该对话框仍然位于所有其他正在运行的应用程序(如记事本、chrome等)的顶部。在应用程序之间不断切换时,这可能会很烦人


我希望QDialog位于我的应用程序之上,而不是其他应用程序之上。任何建议都将不胜感激。

正是为此而设计的。可以将其配置为浮动在窗口顶部。

确保QDialog的父窗口是您的应用程序窗口。如果它的父项为空,则它不知道如何将这两个项堆叠在一起。

使用PyQt5的示例:

w = MyDialog("test", parent) # Dialog that you want to be non modal.                         
d = QtWidgets.QDockWidget(parent) # parent needs to be a QMainWindow.
# make it floatable and give it a close button
d.setFeatures(QtWidgets.QDockWidget.DockWidgetFloatable | QtWidgets.QDockWidget.DockWidgetClosable)
# disable all dock areas so that can't dock
d.setAllowedAreas(Qt.NoDockWidgetArea)
d.setFloating(True)
d.setWidget(w)
d.show()

谢谢你的建议。我检查了,并明确地将父应用程序设置为我的主QApplication。现在,关闭WindowStaysOnTopHint,它应该可以工作了。