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(parent)
{
connect(qApp, &QGuiApplication::commitDataRequest,
this, &MyMainWidget::commitData);
}
voidMyMainWidget::commitData(QSessionManager&manager)
{
if(manager.allowsInteraction()) {
intret=QMessageBox::warning(
mainWindow,
tr("My Application"),
tr("ドキュメントの変更を保存しますか?"),
QMessageBox::Save|QMessageBox::Discard|QMessageBox::Cancel);
switch(ret) {
caseQMessageBox::Save:
manager.release();
if(!saveDocument())
manager.cancel();
break;
caseQMessageBox::破棄:
break;
caseQMessageBox::Cancel:
default:
manager.cancel();
}
}else{
// 操作の許可が得られなかった場合、
// 代わりに適切な処理を行う
}
}データの保存中にアプリケーション内でエラーが発生した場合は、代わりに `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フェーズは、あなたのアプリケーションの第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()も参照してください 。
© 2026 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.