2012-11-16 30 views
3

發出的時候我已經覆蓋在登錄對話框的.h文件中的函數的closeEvent使其退出程序:如何用QCloseEvent退出程序?

void closeEvent(QCloseEvent *event){exit(0)} 

然而,似乎退出了我點擊任何對話框中的按鈕程序。 只有點擊右上角的「x」按鈕才能退出?

+0

登錄窗口是您唯一的窗口嗎?然後QApplication的quitOnLastWindowClosed應該完成這項工作。但是這是默認情況,所以你似乎有另一種設置? –

+0

你應該爲主窗口調用'close()'。 – Ruu

回答

5

closeEvent()在對話框關閉時調用。顯然,如果你點擊一個對話框的「確定」或「取消」按鈕,那麼它想關閉。這個是正常的。

此外,傳遞給closeEvent()的事件應該被接受或忽略。你不應該退出()應用程序。例如:

void closeEvent(QCloseEvent *event) 
{ 
    if (The dialog should close) 
     event->accept(); 
    else 
     event->ignore(); // Don't close. 
} 

爲什麼窗口想要關閉並不重要。用戶是否單擊窗口框中的「確定」或「取消」或「X」按鈕。你不知道。關閉事件就是這樣;窗戶想關閉。

如果對話框是最後打開的窗口,那麼QApplication :: exec()將返回並且程序將正常關閉。