2012-02-13 3 views
1

QApplication::commitDataで何をすべきか、すべきではないかと私はかなり混乱しています。その名前は、私が状態を保存するだけでよいことを意味し、ドキュメントはアプリケーションを閉じるべきではないと言います。ただし、デフォルトの実装では実際にすべてのウィンドウが閉じられ、アプリケーションが終了します。また、これがWindowsのシャットダウンを検出する方法ではない場合、私は実際にシャットダウンされていることを他の方法で知ることはできません。Qt QApplication :: commitData、Windowsのシャットダウン、混乱している文書

saveStateもあります。関数名はほぼ同じであり、ドキュメントも非常に似ています。

システムがシャットダウンされているときに、どのようにして状態を保存してアプリケーションを閉じるのを適切に検出するのですか? commitDataは実際に正しい方法であり、非常に貧しい人々の名前と悪い文書に苦しんでいますか?

答えて

1

アプリケーションのシャットダウンを検出するには、通常、スロットvoid QCoreApplication::aboutToQuit()に接続します。これは文書内に記載されています。

信号は、最後の2回目のクリーンアップを実行する必要がある場合に特に便利です。この状態ではユーザーとの対話はできません。

は、これまでのところは良い、これは冗長に見えるかもしれませんが、私適切

+0

できません。処理が遅すぎます。遅いシャットダウンがあり、進行状況のダイアログを開く必要があります。また、Windowsのシャットダウンをキャンセルする必要がある場合もあります(安全に終了できない場合)。 –

0

commitData()とステートセーブ()のために働いています。

しかしdocumentation

Futhermore言う、ほとんどのセッションマネージャは、非常に可能性の高いアプリケーションが開始された直後に保存された状態を要求します。これにより、セッションマネージャはアプリケーションの再起動ポリシーについて知ることができます。

「データ」と「状態」の概念が分かれている理由がわかるかもしれません。その最初の呼び出しの間、ユーザーとやりとりするのはユーザーフレンドリーではありません。

アプリケーションをシャットダウンするデフォルトの応答は良いデザインのようです。再実装しないと、最も安全なことは(ユーザーが終了操作を選択した場合のように)アプリケーションを終了することですまた、ユーザーのデータを保存します。

OSはシャットダウンしているのですか、セッションのみですか?あなたのアプリが気になる限り、それはセッションだけです(技術的には、ユーザーはログオフすることができ、OSは引き続き実行することができます)。また、ユーザーは、アプリが「シャットダウン」されていない、データを安全に保管できる。

また、iOSのようなモバイルプラットフォームは、アプリケーションが永遠に実行されるように見えます。