Qt: Как создать окно, которое не минимизирует и не блокирует фоновый графический интерфейс
У меня есть QMainWindow
это ребенок в другом окне. Когда пользователь щелкает в любом месте родительского окна, я не хочу, чтобы дочернее окно было свернуто. Дочернее окно должно потерять фокус, и пользователь должен иметь возможность продолжить работу с родительским окном.
Эта функциональность аналогична диалогам поиска / замены, найденным в libreoffice/excel/openoffice и т. Д., Как показано ниже. Мы видим, что панель задач показывает только окно родительского приложения, а дочернее окно не отображается на панели задач.
Есть ли какие-либо сигналы на QMainWindow
что может помочь мне достичь этого? Или каков наилучший способ сделать это?
1 ответ
Если вы откроете новое окно как Dialog
и дать ему родителя, он должен оставаться на вершине родителя. Так как вы используете QMainWindow
Вы можете передать это с помощью конструктора. Если вы решили использовать QDialog
убедитесь, что вы делаете его немодальным с setModal(False)
, Иначе это заблокирует родителя.
Небольшой пример:
import sys
from PyQt4 import QtGui, QtCore
class Window(QtGui.QMainWindow):
def __init__(self, parent=None):
super(Window, self).__init__(parent)
w = QtGui.QWidget()
layout = QtGui.QVBoxLayout(w)
self.button = QtGui.QPushButton('Open Dialog')
self.text = QtGui.QTextEdit()
layout.addWidget(self.button)
layout.addWidget(self.text)
self.setCentralWidget(w)
self.button.clicked.connect(self.openDialog)
def openDialog(self):
self.dialog = QtGui.QMainWindow(self, QtCore.Qt.Dialog)
self.dialog.show()
app = QtGui.QApplication(sys.argv)
w = Window()
w.show()
sys.exit(app.exec_())