阻止和隐藏 QDialog:exec_() 的替代方案?
Posted
技术标签:
【中文标题】阻止和隐藏 QDialog:exec_() 的替代方案?【英文标题】:Block and hide QDialog: Alternative to exec_()? 【发布时间】:2011-11-30 00:32:06 【问题描述】:在我基于 Qt 的应用程序(使用 PyQt 4.8.6 构建)中,我有一个类是 QtGui.QDialog 的子类:
class ModelDialog(QtGui.QDialog):
...
当我运行应用程序的用户界面时,我可以像这样显示 QDialog:
def main():
app = QtGui.QApplication(sys.argv)
dialog = ModelDialog()
dialog.exec_()
根据Qt docs 和PyQt docs,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 docs 预期的)
【问题讨论】:
【参考方案1】:使用app.exec_()
代替dialog.exec_()
。
【讨论】:
以上是关于阻止和隐藏 QDialog:exec_() 的替代方案?的主要内容,如果未能解决你的问题,请参考以下文章
带有隐藏和 WA_QuitOnClose 的 Qt QDialog
PyQt - 隐藏 MainWindow 并显示 QDialog 而不会消失任务栏图标
Qt编程求助:有没有啥类似QDialog::exec()之类的能阻塞程序的方法?