簡體   English   中英

在QDialog :: exec()之后調用QApplication :: exec()

[英]Calling QApplication::exec() after QDialog::exec()

在Qt書中,有一個例子:

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();    
}

當我點擊對話框右上角的關閉按鈕時,對話框窗口消失,但程序仍在運行

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

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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM