QSessionManager Class

QSessionManager クラスは、セッション・マネージャへのアクセスを提供します。詳細...

Header: #include <QSessionManager>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui
Inherits: 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::RestartIfRunning0セッションがシャットダウンされたときにアプリケーションがまだ実行されている場合、次のセッションの開始時に再起動されることを望んでいます。
QSessionManager::RestartAnyway1アプリケーションは、何があっても次のセッションの開始時に開始されることを希望します。(これは、起動直後に実行され、その後終了するユーティリティに便利です)。
QSessionManager::RestartImmediately2アプリケーションが実行中でないときは、いつでもすぐに起動させたい。
QSessionManager::RestartNever3アプリケーションは自動的に再起動されたくない。

デフォルトのヒントは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);
}

void MyMainWidget::commitData(QSessionManager& manager)
{
    if (manager.allowsInteraction()) {
        int ret = QMessageBox::warning(
                    mainWindow,
                    tr("My Application"),
                    tr("Save changes to document?"),
                    QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);

        switch (ret) {
        case QMessageBox::Save:
            manager.release();
            if (!saveDocument())
                manager.cancel();
            break;
        case QMessageBox::Discard:
            break;
        case QMessageBox::Cancel:
        default:
            manager.cancel();
        }
    } else {
        // we did not get permission to interact, then
        // do something reasonable instead
    }
}

アプリケーションのデータ保存中にエラーが発生した場合は、代わりに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()も参照してください

本書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。