我想在應用程序退出之前在Qt應用程序中做一些管家工作(如寫入文件等)。我怎樣才能在Qt中使用這個函數(退出或者其他什麼)?如何在Qt中退出時清理
回答
您需要將帶有清理代碼的插槽連接到QCoreApplication::aboutToQuit()
信號。
這允許您使用QObject::deleteLater()
刪除QObject,並且由於您尚未離開主應用程序事件循環,對象將被刪除。
如果您正在使用需要「關機」呼叫的C庫,則通常可以在從QCoreApplication::exec()
返回後執行此操作。
例兩種技術:
int main(int,char**)
{
QApplication app;
library_init();
QWidget window;
window.show();
QObject::connect(&app, SIGNAL(aboutToQuit()), &window, SLOT(closing()));
const int retval = app.exec();
library_close();
return retval;
}
在問候西拉斯帕克的回答,Qt文檔說,這對aboutToQuit
信號:
的信號是,如果你的應用程序必須做的特別有用一些 最後一次清理。請注意,此 狀態中不可能有用戶交互。
如果你希望你的應用程序能夠取消退出進程或允許用戶在應用程序關閉之前進行最後一分鐘的變化,那麼你可以通過在MainWindow
處理closeEvent
功能做到這一點。
void MainWindow::closeEvent(QCloseEvent *event)
{
if (maybeSave()) {
writeSettings();
event->accept();
} else {
event->ignore();
}
}
有關更多信息,請參閱closeEvent文檔。
如何在QApplication而不是QMainWIndow中處理? – prakashpun
@ pra16'QApplication'並不真正具有'closeEvent'的必然結果。您可以嘗試使用['lastWindowClosed'](http://doc.qt.io/qt-5/qguiapplication.html#lastWindowClosed)或使用信號處理來中斷暫停/關閉信號。 –
- 1. 退出Qt清理?
- 2. 在退出之前在node.js中清理
- 3. Bash腳本退出清理
- 4. AIR SocketServer清理?應用程序退出時如何關閉?
- 5. 退出javafx程序時如何清理程序?
- 6. 在節點js退出前清理
- 7. Qt:退出應用程序 - >清單以進行適當的清理
- 8. 線程退出後Qt處理信號?
- 9. 在進程退出時自動清理PF_UNIX套接字?
- 10. Python as Hive UDF - 清理異常退出
- 11. Perl:退出前清理活動線程
- 12. 退出WPF應用程序清理
- 13. 退出所有用戶清理
- 14. 如何在用戶退出時清除表格?
- 15. 如何在退出時清除導航抽屜(所有碎片)
- 16. 如何在應用程序退出時清除SQLite數據庫?
- 17. 在Qt中實現退出按鈕
- 18. 在Qt中退出應用程序
- 19. QT QTcpServer在線程中;如何在退出時關閉監聽服務器?
- 20. 如何清理地退出cmd模塊的cmd循環
- 21. 退出清理程序以及如何與GC
- 22. 隱藏窗口時Qt退出
- 23. 如何在出錯時退出批處理程序?
- 24. 如何在PowerShell ISE中退出DLL清理資源 - 像新的PSSession和新PSJob
- 25. 如何在qt中創建正確的退出按鈕
- 26. 如何清理Spork輸出?
- 27. Qt從源代碼Qt如何清理舊的配置配置?
- 28. 如何從父批處理中退出
- 29. 如何處理退出()在NSOperation
- 30. 在長時間運行的子進程退出後清理臨時文件夾
請注意,當前的Qt文檔特別建議在exec返回後不要做任何事情。請參閱(http://doc.qt.io/qt-5/qapplication.html#exec) –
請注意,從終端重新啓動或丟失X連接會觸發不會發出aboutToQuit的:: exit()。 (至少到5.7) – ManuelSchneid3r