QSessionManager Class
QSessionManager クラスは、セッション・マネージャへのアクセスを提供します。詳細...
ヘッダー | #include <QSessionManager> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
qmake: | QT += gui |
継承: | QObject |
パブリックな型
enum | RestartHint { RestartIfRunning, RestartAnyway, RestartImmediately, RestartNever } |
パブリック関数
bool | allowsErrorInteraction() |
bool | allowsInteraction() |
void | cancel() |
QStringList | discardCommand() const |
bool | isPhase2() const |
void | release() |
void | requestPhase2() |
QStringList | restartCommand() const |
QSessionManager::RestartHint | restartHint() const |
QString | sessionId() const |
QString | sessionKey() const |
void | setDiscardCommand(const QStringList &command) |
void | setManagerProperty(const QString &name, const QStringList &value) |
void | setManagerProperty(const QString &name, const QString &value) |
void | setRestartCommand(const QStringList &command) |
void | setRestartHint(QSessionManager::RestartHint hint) |
詳しい説明
デスクトップ環境(Qt GUI アプリケーションが存在する環境)のセッションマネージャは、セッションを追跡します。セッションは、実行中のアプリケーションのグループであり、各アプリケーションは特定の状態を持っています。アプリケーションの状態には、アプリケーションが開いているドキュメントや、ウィンドウの位置とサイズが含まれます。
セッション・マネージャーは、例えばマシンをシャットダウンするときにセッションを保存し、例えばマシンを起動するときにセッションを復元するために使用されます。アプリケーションの設定、例えばウィンドウの位置、最近使用したファイルなどを保存するには、QSettings を使用することをお勧めします。セッション・マネージャによってアプリケーションが再起動されたときに、設定を復元することができます。
QSessionManager は、アプリケーションとプラットフォームのセッションマネージャ間のインタフェースを提供します。Qt では、セッション管理のアクション要求は、QGuiApplication::commitDataRequest() とQGuiApplication::saveStateRequest() の 2 つのシグナルで処理されます。どちらもQSessionManagerオブジェクトへの参照を引数として与えます。セッション・マネージャーは、これらのシグナルによって呼び出されるスロットでのみアクセスできます。
アプリケーションがセッション・マネージャから明示的な許可を得ない限り、ユーザーとの対話はできません。許可を得るには、allowsInteraction ()を呼び出すか、本当に緊急であればallowsErrorInteraction ()を呼び出します。Qt はこれを強制しませんが、セッション・マネージャはこれを強制するかもしれません。
cancel() を呼び出すことで、シャットダウン処理を中止することができます。
Unix/X11で提供されている洗練されたセッションマネージャのために、QSessionManagerはアプリケーションのセッション管理動作を微調整するための更なる可能性を提供します:setRestartCommand(),setDiscardCommand(),setRestartHint(),setProperty(),requestPhase2()。詳細については、各関数の説明を参照してください。
QGuiApplication 、セッション管理も参照の こと。
メンバ型ドキュメント
enum QSessionManager::RestartHint
この列挙型は、このアプリケーションがセッション・マネージャによって再起動されることを望む状況を定義する。現在の値は
定数 | 値 | 説明 |
---|---|---|
QSessionManager::RestartIfRunning | 0 | セッションがシャットダウンされたときにアプリケーションがまだ実行されている場合、次のセッションの開始時に再起動されることを望みます。 |
QSessionManager::RestartAnyway | 1 | アプリケーションは、何があっても次のセッションの開始時に開始されることを希望します。(これは、起動直後に実行され、その後終了するユーティリティに便利です)。 |
QSessionManager::RestartImmediately | 2 | アプリケーションが実行中でないときは、いつでもすぐに起動させたい。 |
QSessionManager::RestartNever | 3 | アプリケーションは自動的に再起動されたくない。 |
デフォルトのヒントはRestartIfRunning
です。
メンバ関数ドキュメント
bool QSessionManager::allowsErrorInteraction()
エラー対話が許可されている場合はtrue
を返し、そうでない場合はfalse
を返す。
これはallowsInteraction()と似ているが、発生したエラーについてアプリケーショ ンがユーザーに伝えることもできる。セッションマネージャはエラー対話リクエストに高い優先度を与えるかもしれません。 これは、エラー対話が許可される可能性が高くなることを意味します。しかし、セッション・マネージャがエラーとのやりとりを許可するとは限りません。
allowsInteraction()、release()、cancel()も参照の こと。
bool QSessionManager::allowsInteraction()
セッションマネージャーにユーザーとの対話の許可を求める。対話が許可されている場合は true を返し、そうでない場合はfalse
を返します。
このメカニズムの背後にある論理的根拠は、シャットダウン中にユーザーとの対話 を同期できるようにすることである。高度なセッションマネージャーは、すべてのアプリケーションに同時にデータをコミットするように要求することができ、その結果、シャットダウンが非常に速くなります。
インタラクションが完了したら、release ()を呼び出してユーザー・インタラクション・セマフォを解放することを強く推奨する。こうすることで、あなたのアプリケーションがまだデータの保存に追われている間に、他のアプリケーションがユーザーと対話する機会を得ることができます。(セマフォは、アプリケーションが終了するときに暗黙的に解放される)。
インタラクション・フェーズ中にユーザがシャットダウン・プロセスのキャンセルを決 定した場合、cancel() を呼び出して、セッション・マネージャにその旨を伝え る必要があります。
以下は、アプリケーションのQGuiApplication::commitDataRequest ()の実装例です:
MyMainWidget::MyMainWidget(QWidget(*parent) : QWidget(親){ connect(qApp, &QGuiApplication::commitDataRequest, this, &MyMainWidget::commitData); }voidMyMainWidget::commitData(QSessionManager&manager) {if(manager.allowsInteraction()) {intret=::warning( mainWindow, tr("私のアプリケーション", tr("ドキュメントに変更を保存しますか? QMessageBox::warning( mainWindow,tr("My Application"),tr("Save changes to document?")、 QMessageBox:保存 QMessageBox:破棄 QMessageBox::Cancel);switch(ret) {caseQMessageBox::Save: manager.release();if(!saveDocument()) manager.cancel();break;caseQMessageBox::Discard:break;caseQMessageBox
アプリケーションのデータ保存中にエラーが発生した場合は、代わりにallowsErrorInteraction() を試してみてください。
QGuiApplication::commitDataRequest()、release()、cancel()も参照の こと。
void QSessionManager::cancel()
セッション・マネージャにシャットダウン処理をキャンセルするよう指示します。アプリケーションは、最初にユーザーに尋ねずにこの関数を呼んではならない。
allowsInteraction() およびallowsErrorInteraction()も参照の こと。
QStringList QSessionManager::discardCommand() const
現在設定されている破棄コマンドを返す。
setDiscardCommand()、restartCommand()、setRestartCommand()も参照 。
bool QSessionManager::isPhase2() const
セッションマネージャーが現在2番目のセッション管理フェーズを実行している場合はtrue
を返し、そうでない場合はfalse
を返す。
requestPhase2()も参照のこと 。
void QSessionManager::release()
インタラクションフェーズの後にセッションマネージャのインタラクションセマフォを解放します。
allowsInteraction() およびallowsErrorInteraction()も参照してください 。
void QSessionManager::requestPhase2()
アプリケーションに2回目のセッション管理フェーズを要求する。アプリケーションは、QGuiApplication::commitDataRequest()またはQApplication::saveStateRequest()関数から即座に戻ることができ、他のアプリケーションのほとんどまたはすべてがセッション管理を終了すると、これらの関数が再び呼び出されます。
この2つのフェーズは、X11ウィンドウ・マネージャのように、他のアプリケーションのウィンドウに関する情報を保存する必要があり、そのためこれらのアプリケーションがそれぞれのセッション管理タスクを完了するまで待たなければならないアプリケーションに便利です。
注意: 他のアプリケーションが第2フェーズを要求した場合、そのアプリケーションの第2フェーズの前、同時、または後に呼び出される可能性があります。
isPhase2()も参照してください 。
QStringList QSessionManager::restartCommand() const
現在設定されている再起動コマンドを返す。
setRestartCommand() およびrestartHint()も参照 。
QSessionManager::RestartHint QSessionManager::restartHint() const
アプリケーションの現在の再起動ヒントを返す。デフォルトはRestartIfRunning
。
setRestartHint()も参照 。
QString QSessionManager::sessionId() const
現在のセッションの識別子を返します。
アプリケーションが以前のセッションからリストアされている場合、この識別子は以前のセッションと同じです。
sessionKey() およびQGuiApplication::sessionId()も参照してください 。
QString QSessionManager::sessionKey() const
現在のセッションのセッション・キーを返します。
以前のセッションからアプリケーションが復元された場合、このキーは以前のセッションが終了したときと同じです。
セッション・キーは、 commitData() または saveState() を呼び出すたびに変更されます。
sessionId() およびQGuiApplication::sessionKey()も参照してください 。
void QSessionManager::setDiscardCommand(const QStringList &command)
与えられたcommand に廃棄コマンドを設定する。
discardCommand() およびsetRestartCommand()も参照のこと 。
void QSessionManager::setManagerProperty(const QString &name, const QStringList &value)
アプリケーションの識別と状態記録への低レベルの書き込みアクセスは、セッション・マネージャに保持される。
name というプロパティには、その値が文字列リストvalue に設定されている。
void QSessionManager::setManagerProperty(const QString &name, const QString &value)
これはオーバーロードされた関数である。
アプリケーションの識別と状態の記録への低レベルの書き込みアクセスは、セッション・マネージャに保持される。
name というプロパティには、その値が文字列value に設定される。
void QSessionManager::setRestartCommand(const QStringList &command)
セッションマネージャーがセッションをリストアできる場合、アプリケーションをリストアするためにcommand 。コマンドのデフォルトは
appname -session id
-session
オプションは必須である。そうでなければ、QGuiApplication はリストアされたかどうか、あるいは現在のセッション識別子が何であるかを知ることができない。詳しくはQGuiApplication::isSessionRestored() とQGuiApplication::sessionId() を参照してください。
アプリケーションが非常に単純な場合、アプリケーションの状態全体を追加のコマンド行オプショ ンに格納することができるかもしれない。コマンド行は数百バイトに制限されていることが多いので、これは通常、非常に悪い考えです。その代わりに、QSettings 、一時ファイル、またはデータベースをこの目的に使用してください。データを一意のsessionId() でマークすることで、将来のセッションでアプリケーションを復元できるようになる。
restartCommand()、setDiscardCommand()、setRestartHint()も参照の こと。
void QSessionManager::setRestartHint(QSessionManager::RestartHint hint)
アプリケーションの再起動ヒントをhint に設定する。アプリケーションの起動時に、ヒントはRestartIfRunning
に設定される。
注意: これらのフラグはあくまでもヒントであり、セッションマネージャはこれを尊重する場合もあれば、尊重しない場合もあります。
ほとんどのセッション・マネージャはアプリケーションの起動直後にチェックポイントを実行するため、QGuiApplication::saveStateRequest() で再起動ヒントを設定することを推奨します。
restartHint()も参照のこと 。
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.