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_())
Другие вопросы по тегам