Поместите немодальное окно QDialog только поверх моего приложения, а не всех приложений

У меня есть окно QDialog, которое всегда должно быть поверх моего приложения. Это НЕ модально. Пользователь может взаимодействовать с диалогом и основным приложением в любое время. Использование WindowStaysOnTopHint в некоторой степени позволяет это сделать. Однако диалоговое окно остается поверх всех других запущенных приложений (например, блокнот, хром и т. д.). Это может раздражать при постоянном переключении между приложениями.

Я хотел бы, чтобы QDialog был поверх моего приложения и никого другого. Любые предложения будут ценны.


person Aaron Wiginton    schedule 26.09.2014    source источник


Ответы (3)


QDockWidget предназначен именно для этого. Его можно настроить так, чтобы он плавал поверх вашего окна.

person Max Go    schedule 26.09.2014

Убедитесь, что родителем QDialog является окно вашего приложения. Если у него есть родитель NULL, то он не знает, как сложить их вместе.

person Mike    schedule 26.09.2014
comment
Спасибо за предложение. Я проверил, и я явно устанавливаю родителя в качестве основного приложения QApplication. - person Aaron Wiginton; 27.09.2014
comment
Теперь отключите WindowStaysOnTopHint, и все должно заработать. - person Mike; 30.09.2014

Пример 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()
person glennr    schedule 21.01.2016