2012-01-11 84 views
6

問題如下:如果應用程序在不主動執行任何操作時關閉,則它將正確退出。但是,如果它正在積極地處理某些事情(例如,在等待循環中等待),主窗口將關閉,但程序將繼續在後臺運行,如打開任務管理器所確認的。即使在關閉MainWindow後,Qt應用程序仍保留在內存中

我已經花了很大一部分今天googling問題和實施可能的修復,但無濟於事。看起來好像quit()函數根本沒有做任何事情。這裏有一些我已經嘗試過的東西:

  • 使用app.connect(&app, SIGNAL(lastWindowClosed()), &app, SLOT(quit()));。我知道信號被觸發,因爲我試圖將&app, SLOT(quit())更改爲qApp, SLOT(aboutQt())並且快速彈出aboutQt窗口。
  • qApp->quit();包括在從主窗口按鈕運行的函數的開頭。該應用程序確實運行到該行,但它沒有效果。使用processEvents()確保GUI正在更新。
  • 在main.cpp中包含像mainWindow.setAttribute(Qt::WA_QuitOnClose);這樣的語句。

我只是想讓應用程序在主窗口關閉時完全退出。

我正在使用qextserialport庫,如果這有什麼區別。

+0

您的應用程序是多線程的嗎? – Lol4t0 2012-01-12 12:27:00

+0

我不是親自創建線程,但我不確定我使用的庫是否是。如果我打開調試器並查看線程,我會看到一堆「ntdll!ldrFindResourceEx_U」函數。但是,我只能在任務管理器進程中看到我的程序的一個實例。 PS:爲什麼地獄會按輸入發送信息,而不是創建一個換行符? – SharpHawk 2012-01-12 15:21:58

+0

然後,您的主線程可能會等待這些線程完成其工作。它可以隱式完成,例如,對象的析構函數可能會等待線程完成。你應該研究你的庫代碼。 PS'qextserialport',據我所知不會創建任何線程。 – Lol4t0 2012-01-12 15:26:05

回答

1

我不知道有什麼問題,但是由於您的插槽實際上收到了信號,您可以從該插槽功能中調用exit()作爲解決方法。

+0

我認爲這是一個不好的解決方案,因爲如果應用程序在另一個線程中處理了某些東西,在這種終止之後,TS可能會損壞一些數據 – Lol4t0 2012-01-12 12:25:20

相關問題