2013-10-07 60 views
0

我總是遇到問題才能正常關閉Qt應用程序。在退出Qt :: Application時應該注意什麼?我想編譯一個檢查清單,我可以按照程序使用的功能來正確退出所有部件。例如,如果我使用QThreads,需要做些什麼才能確保它們被正確關閉,以及其他所有可能需要特別照顧的部分。Qt:退出應用程序 - >清單以進行適當的清理

我希望我不是唯一有這種問題的人,事實證明這對許多人有用。

回答

0

除適當的C++設計之外,沒有任何清單。不幸的是,QThread不提供任何理智的默認銷燬行爲。在C++的土地上,這名義上是一個禁忌。你需要一些擁有你的線程的QObject,並且在消失之前,注意要麼退出,要麼終止它們,然後在它們被銷燬之前等待它們。所有你自己寫的課程都是一樣的:他們必須在被破壞時正確行事。 Qt通常在其各個類的實例被刪除時適當地運行,QThread真的很出色。

一旦您遵循C++設計的基本原則,即對象在銷燬時釋放資源,您就不會有任何問題。使用智能指針,包括C++ 11(如果可用)。 QPointerQSharedPointer,QScopedPointer都是你的朋友。

0

在QThread的的情況下,使用信號和槽機制,你可以有完成時的QThread自動刪除: -

// Note - using Qt 5 connect style 
QThread* pThread = new QThread; 
connect(pThread, &QThread::finished, pThread, &QThread::deleteLater); 

現在一切都已經發生針對線程完成處理,或線程的所有者來調用pThread-> quit()。

關於如何正確使用QThreads,有一篇很棒的文章here

對於所有其他Qt類,只要對象/窗口小部件實例具有父級,那麼Qt將處理刪除所有子對象。通常,頂級小部件是一個在關閉時將被刪除的窗口。