天天看點

QT之quit()、exit()退出無效

今天處理一個退出程式問題,查資料後可用quit()、exit()退出程式

問題:登入界面(模态的dialog),主界面。登陸成功則進入主界面,不成功會有相關提示,退出則關閉程式。

在主程式的mainwindow構造函數中調用login登入界面,并做相關處理,結果無論如何也退出不了程式。

漫漫分析路:

QT之quit()、exit()退出無效

從函數的介紹中可以知道:如果事件循環沒有運作,則此函數不執行任何操作!!!

也就是說在執行exec()函數之前調用exit()、quit()函數退出的,是無效操作

在這裡,由于login登入部分是在mainwindow的構造函數中執行的,而此時exec()還沒有執行,沒有建立事件循環,是以此時的退出操作是無效的

解決:設定标志位 LlOGONCOMPLETIONFLAG,用于在login界面成功或退出時指派;通過QTimer不斷的執行退出函數,直至成功。

部分代碼如下:

void MainWindow::loginWin()
{
    m_login = new login;
    m_login->setModal(true);        //設定為模态對話框
    m_login->exec();

    if(LlOGONCOMPLETIONFLAG)
    {
        QTimer *timer = new QTimer();
        connect(timer, SIGNAL(timeout()), qApp, SLOT(quit()));
        timer->start(100);
        return;
    }
    m_pMdiArea->hide();
}
           

歡迎大家指教,希望大家喜歡

路漫漫其修遠兮,同志仍須努力