2012-08-22 37 views
1

在Qt的書,有喜歡的例子:調用的QApplication :: EXEC()了QDialog :: EXEC()之後

int main(int argc, char *argv[]) 
{  
    QApplication app(argc,argv); 
    QDialog dialog; 
    dialog.show(); 
    return app.exec();  
} 

它的精心運作,但低於變化不大

int main(int argc, char *argv[]) 
{  
    QApplication app(argc,argv); 
    QDialog dialog; 
    dialog.exec(); 
    return app.exec();  
} 

時,我打在對話框的右上角cornor的關閉按鈕,對話框窗口disappered但程序仍在運行

什麼dialog.exec()和app.exec()有什麼區別? 我可以簡單地使用dialog.exec(),然後返回0或它會導致什麼問題?

回答

4

QDialog,QMenu,QCoreApplication的exec方法運行事件循環。事件循環是無限的。

所以QApplication事件循環應該是第一個要啓動的。在大多數情況下,您應該使用QDialog :: show()或QDialog :: open()而不是QDialog :: exec()。

在你有下面的代碼換句話說:

while (1) // QDialog::exec 
{ 
    // Close event 
} 

while (1) // QApplication::exec 
{ 
    // There are no events 
}