2011-06-10 72 views
1

後我有簡單的應用程序,從它的主要啓動QDialog的是這樣的:Qt的過程停留在存儲器應用程序關閉

int main(int argc, char *argv[]) 
{ 
    Q_INIT_RESOURCE(resources); 
    QApplication app(argc, argv); 
    QCoreApplication::setApplicationName(APP_NAME); 
    QCoreApplication::setApplicationVersion(APP_VERISON); 
    QCoreApplication::setOrganizationDomain(APP_DOMAIN); 
    app.setStyle("WindowsXP");  
    QTextCodec::setCodecForTr(QTextCodec::codecForName("utf8")); 
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); 

     AuthenticationDialogContainer *pAuthenticationDialogContainer = new AuthenticationDialogContainer(); 
    if(pAuthenticationDialogContainer->exec() != QDialog::Accepted) { 
     return 0; 
    } 



    return app.exec(); 
} 

時其傳遞是app.exec(後應用程序的結束)和應用做假設要做的事情。當我打開Windows XP任務管理器時,我發現該進程仍在內存中,我需要手動將其殺死。我如何防止它發生?

+0

您應該修改最後一行,以便在返回之前在控制檯中輸出app.exec()的結果。如果沒有打印出來,那麼它意味着app.exec()實際上不會返回,因此阻止了您的進程結束。 – SirDarius 2011-06-10 07:44:54

回答

1

QDialog :: exec是一個阻塞調用:此代碼在QApplication啓動之前顯示並關閉對話框。
您可以使用QDialog :: show並處理QDialog :: accept方法中的返回碼。

+0

請詳細說明一下新的qt。 – Newbi 2014-04-03 12:36:19