阻止并隐藏QDialog: exec_()的替代方法?
在我的基于Qt的应用程序中(使用PyQt 4.8.6构建),我有一个类,它是QtGui.QDialog的子类:
class ModelDialog(QtGui.QDialog):
...
当我运行应用程序的用户界面时,我可以这样显示QDialog:
def main():
app = QtGui.QApplication(sys.argv)
dialog = ModelDialog()
dialog.exec_()
根据Qt文档和PyQt文档,exec_()
是一个阻塞函数,这意味着在调用这个QDialog时,它会默认变成一个模态窗口(模态窗口的意思是用户不能与应用程序中的其他窗口进行交互)。在正常情况下,这正是发生的情况。
不过,最近我一直在尝试一种方法,通过使用所有输入值的默认设置来调用整个QApplication,而不询问用户任何输入。应用程序的行为如预期一样,除了一个方面:调用dialog.exec_()
会导致模态对话框显示出来。
我找到的唯一解决办法是捕获showEvent
函数,然后迅速隐藏窗口,但这仍然会让QDialog对象在一瞬间显示出来:
class ModelDialog(QtGui.QDialog):
...
def showEvent(self, data=None):
self.hide()
有没有办法完全防止模态窗口显示,同时继续阻塞主事件循环?我希望能有类似这样的东西:
def main():
app = QtGui.QApplication(sys.argv)
dialog = ModelDialog()
dialog.setHideNoMatterWhat(True)
dialog.exec_()
(为此,我尝试使用QWidget.setVisible(False)
,但dialog.exec_()
仍然会让对话框可见,这也是根据Qt文档的预期行为)
1 个回答
2
用 app.exec_()
来代替 dialog.exec_()
。