2011-11-30 74 views
1

在我基於Qt的應用程序(使用PyQt的4.8.6內置),我有一類就是QtGui.QDialog的一個子類:阻止並隱藏QDialog:替代exec_()?

class ModelDialog(QtGui.QDialog): 
    ... 

當我運行應用程序的用戶界面,我可以顯示了QDialog像這樣:

def main(): 
    app = QtGui.QApplication(sys.argv) 
    dialog = ModelDialog() 
    dialog.exec_() 

按照Qt docsPyQt docsexec_()是此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預期)

回答

2

使用app.exec_()而不是dialog.exec_()

+0

真棒...作品像一個魅力。謝謝! – James

相關問題