2012-02-13 85 views
1

我很困惑在QApplication::commitData中應該做什麼和不應該做什麼。這個名字意味着我應該只存儲狀態,並且文檔說它不應該關閉應用程序。但是,默認實現確實會關閉所有窗口,從而關閉應用程序。此外,如果這不是檢測Windows關機的方式,我沒有看到任何其他方式告訴Windows確實正在關機。Qt QApplication :: commitData,Windows關機,令人困惑的文檔

還有相關的saveState。函數名的意思大致相同,文檔也非常相似。

我該如何正確檢測系統何時關閉並保存我的狀態並關閉我的應用程序? commitData確實是正確的方法,只是遭受了一個非常糟糕的名字和糟糕的文檔?

回答

1

在我的實踐中,檢測應用程序關機時,我通常連接到插槽void QCoreApplication::aboutToQuit()。正如它在文件中所述:

如果您的應用程序必須執行最後一次清理,該信號特別有用。請注意,在這種狀態下不能進行用戶交互。

到目前爲止好這個工作了正確

+0

不能,在這個過程中已經太晚了。我們的關機速度很慢,需要打開一個進度對話框。此外,我們還必須取消Windows關機(如果我們無法安全退出)。 – 2012-02-13 10:23:23

0

commitData()我和saveState和()看起來是多餘的。

documentation

Futhermore,最會話管理器很可能會請求的應用程序已經啓動後立即保存的狀態。這允許會話管理器瞭解應用程序的重新啓動策略。

也許這就解釋了爲什麼「數據」和「狀態」的概念是分開的。在最初的通話過程中,與用戶進行交互不太方便。

關閉應用程序的默認響應看起來是一個很好的設計,因爲如果您不重新實現,那麼最安全的方法就是關閉應用程序(就好像用戶選擇了Quit操作一樣),應該也保存用戶的數據。

操作系統是關閉的,還是隻有會話?就應用程序而言,這只是會話(從技術上講,用戶可能會註銷並且操作系統繼續運行)。用戶可能會認爲該應用程序未被關閉,只是被暫停數據安全。「

也考慮像iOS這樣的移動平臺,其中應用程序似乎永遠運行。