2013-04-10 3 views
0

У меня есть QMainWindow, который является дочерним в другое окно. Когда пользователь щелкает в любом месте родительского окна, я не хочу, чтобы дочернее окно было сведено к минимуму. Детское окно должно потерять фокус, и пользователь должен иметь возможность продолжить работу над родительским окном.Qt: Как создать окно, которое не сводит к минимуму и не блокирует фоновый графический интерфейс

Эта функциональность похожа на диалоги поиска/замены, найденные в libreoffice/excel/openoffice и т. Д., Как показано ниже. Мы видим, что на панели задач отображается только окно родительского приложения, а дочернее окно не отображается в панели задач.

enter image description here

Существуют ли какие-либо сигналы на QMainWindow, которые могли бы помочь мне достичь этого? Или что было бы лучшим способом сделать это?

ответ

5

Если вы открываете новое окно как 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_()) 
+0

вау! я не ожидал рабочего примера. – vinayan

Смежные вопросы