我正在使用MDI工作区。 我需要一个非模态窗口,它位于工作区中的所有内容(或应用程序中的所有内容)之上,但允许与工作区进行交互。 以下实现了这一效果:
QDialog* widget = new QDialog();
widget->setModal(false);
widget->setWindowFlags(Qt::WindowStaysOnTopHint);
widget->show();
但是 - 此窗口也位于与我的应用程序一起运行的所有其他应用程序窗口之上。 (如果我打开Chrome,我的窗口也在Chrome上面。)
我希望窗口能够保持在我的应用程序之上。
我使用的是Qt 4.8,但5.4兼容的解决方案是理想的。 我使用的是Windows 7 Pro SP1,但自然而言,平台无关的解决方案是理想的选择。 谢谢!
答案 0 :(得分:-2)
您可以使用QDockWidget。 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()