QSessionManager Class

Die Klasse QSessionManager ermöglicht den Zugriff auf den Sitzungsmanager. Mehr...

Kopfzeile: #include <QSessionManager>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui
Vererbungen: QObject

Öffentliche Typen

enum RestartHint { RestartIfRunning, RestartAnyway, RestartImmediately, RestartNever }

Öffentliche Funktionen

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)

Detaillierte Beschreibung

Ein Sitzungsmanager in einer Desktop-Umgebung (in der sich Qt GUI Anwendungen befinden) überwacht eine Sitzung, d.h. eine Gruppe von laufenden Anwendungen, von denen jede einen bestimmten Status hat. Der Status einer Anwendung enthält (vor allem) die Dokumente, die die Anwendung geöffnet hat, sowie die Position und Größe ihrer Fenster.

Der Sitzungsmanager wird verwendet, um die Sitzung zu speichern, z. B. beim Herunterfahren des Rechners, und um eine Sitzung wiederherzustellen, z. B. beim Starten des Rechners. Wir empfehlen Ihnen, QSettings zu verwenden, um die Einstellungen einer Anwendung zu speichern, z. B. die Fensterpositionen, die zuletzt verwendeten Dateien usw. Wenn die Anwendung durch den Sitzungsmanager neu gestartet wird, können Sie die Einstellungen wiederherstellen.

QSessionManager bietet eine Schnittstelle zwischen der Anwendung und dem Sitzungsmanager der Plattform. In Qt werden Anfragen zur Sitzungsverwaltung durch die beiden Signale QGuiApplication::commitDataRequest() und QGuiApplication::saveStateRequest() behandelt. Beide liefern einen Verweis auf ein QSessionManager-Objekt als Argument. Auf den Sitzungsmanager kann nur in Slots zugegriffen werden, die von diesen Signalen aufgerufen werden.

Eine Benutzerinteraktion ist nur möglich , wenn die Anwendung die ausdrückliche Erlaubnis des Sitzungsmanagers erhält. Sie bitten um Erlaubnis, indem Sie allowsInteraction() oder, wenn es wirklich dringend ist, allowsErrorInteraction() aufrufen. Qt erzwingt dies nicht, aber der Sitzungsmanager kann es.

Sie können versuchen, den Shutdown-Prozess abzubrechen, indem Sie cancel() aufrufen.

Für ausgefeilte Sitzungsmanager unter Unix/X11 bietet QSessionManager weitere Möglichkeiten zur Feinabstimmung des Sitzungsverwaltungs-Verhaltens einer Anwendung: setRestartCommand(), setDiscardCommand(), setRestartHint(), setProperty(), requestPhase2(). Weitere Einzelheiten finden Sie in den jeweiligen Funktionsbeschreibungen.

Siehe auch QGuiApplication und Sitzungsverwaltung.

Dokumentation der Mitgliedstypen

enum QSessionManager::RestartHint

Dieser Enum-Typ definiert die Umstände, unter denen diese Anwendung vom Sitzungsmanager neu gestartet werden soll. Die aktuellen Werte sind:

KonstanteWertBeschreibung
QSessionManager::RestartIfRunning0Wenn die Anwendung noch läuft, wenn die Sitzung beendet wird, möchte sie zu Beginn der nächsten Sitzung neu gestartet werden.
QSessionManager::RestartAnyway1Die Anwendung möchte auf jeden Fall zu Beginn der nächsten Sitzung gestartet werden. (Dies ist nützlich für Dienstprogramme, die kurz nach dem Start ausgeführt und dann beendet werden).
QSessionManager::RestartImmediately2Die Anwendung soll sofort gestartet werden, wenn sie nicht ausgeführt wird.
QSessionManager::RestartNever3Die Anwendung soll nicht automatisch neu gestartet werden.

Der Standard-Hinweis lautet RestartIfRunning.

Dokumentation der Mitgliedsfunktionen

bool QSessionManager::allowsErrorInteraction()

Gibt true zurück, wenn eine Fehlerinteraktion erlaubt ist; andernfalls false.

Dies ist ähnlich wie allowsInteraction(), ermöglicht es der Anwendung aber auch, den Benutzer über aufgetretene Fehler zu informieren. Sitzungsmanager können Anfragen zur Fehlerinteraktion eine höhere Priorität einräumen, was bedeutet, dass es wahrscheinlicher ist, dass eine Fehlerinteraktion zugelassen wird. Es gibt jedoch keine Garantie dafür, dass der Sitzungsmanager eine Interaktion zulässt.

Siehe auch allowsInteraction(), release(), und cancel().

bool QSessionManager::allowsInteraction()

Fragt den Sitzungsmanager nach der Erlaubnis zur Interaktion mit dem Benutzer. Gibt true zurück, wenn die Interaktion erlaubt ist; andernfalls wird false zurückgegeben.

Der Grundgedanke hinter diesem Mechanismus ist es, die Synchronisierung der Benutzerinteraktion während des Herunterfahrens zu ermöglichen. Fortgeschrittene Sitzungsmanager können alle Anwendungen gleichzeitig auffordern, ihre Daten zu übertragen, was zu einem wesentlich schnelleren Herunterfahren führt.

Wenn die Interaktion abgeschlossen ist, empfehlen wir dringend, die Semaphore für die Benutzerinteraktion mit einem Aufruf von release() freizugeben. Auf diese Weise können andere Anwendungen die Möglichkeit erhalten, mit dem Benutzer zu interagieren, während Ihre Anwendung noch mit dem Speichern von Daten beschäftigt ist. (Die Semaphore wird implizit freigegeben, wenn die Anwendung beendet wird).

Wenn der Benutzer während der Interaktionsphase beschließt, den Shutdown-Prozess abzubrechen, müssen Sie dem Sitzungsmanager mit dem Aufruf cancel() mitteilen, dass dies geschehen ist.

Das folgende Beispiel zeigt, wie QGuiApplication::commitDataRequest() in einer Anwendung implementiert sein könnte:

MyMainWidget::MyMainWidget(QWidget *parent) : QWidget(Elternteil){
    connect(qApp, &QGuiApplication::commitDataRequest,
           this, &MyMainWidget::commitData); }void MyMainWidget::commitData(QSessionManager& manager) { if (manager.allowsInteraction()) { int ret = QMessageBox::warning( mainWindow,tr("Meine Anwendung"),tr("Änderungen im Dokument speichern?"),             QMessageBox::Speichern | QMessageBox::Verwerfen | QMessageBox::Abbrechen); switch (ret) { case QMessageBox::Save: manager.release(); if (!saveDocument()) manager.cancel(); break; case QMessageBox::Discard: break; case QMessageBox::Cancel: default: manager.cancel(); } } else { // wir haben keine Erlaubnis zur Interaktion erhalten, dann // tun Sie stattdessen etwas Vernünftiges} }

Wenn innerhalb der Anwendung beim Speichern der Daten ein Fehler auftritt, können Sie stattdessen allowsErrorInteraction() verwenden.

Siehe auch QGuiApplication::commitDataRequest(), release(), und cancel().

void QSessionManager::cancel()

Weist den Sitzungsmanager an, den Beendigungsprozess abzubrechen. Anwendungen sollten diese Funktion nicht aufrufen, ohne den Benutzer vorher zu fragen.

Siehe auch allowsInteraction() und allowsErrorInteraction().

QStringList QSessionManager::discardCommand() const

Gibt den aktuell eingestellten Verwerfungsbefehl zurück.

Siehe auch setDiscardCommand(), restartCommand(), und setRestartCommand().

bool QSessionManager::isPhase2() const

Gibt true zurück, wenn der Sitzungsmanager gerade eine zweite Phase der Sitzungsverwaltung durchführt; andernfalls wird false zurückgegeben.

Siehe auch requestPhase2().

void QSessionManager::release()

Gibt die Interaktionssemaphore des Sitzungsmanagers nach einer Interaktionsphase frei.

Siehe auch allowsInteraction() und allowsErrorInteraction().

void QSessionManager::requestPhase2()

Fordert eine zweite Phase der Sitzungsverwaltung für die Anwendung an. Die Anwendung kann dann sofort von der Funktion QGuiApplication::commitDataRequest() oder QApplication::saveStateRequest() zurückkehren, und sie werden erneut aufgerufen, sobald die meisten oder alle anderen Anwendungen ihre Sitzungsverwaltung abgeschlossen haben.

Die beiden Phasen sind nützlich für Anwendungen wie den X11-Fenstermanager, die Informationen über die Fenster einer anderen Anwendung speichern müssen und daher warten müssen, bis diese Anwendungen ihre jeweiligen Sitzungsverwaltungsaufgaben abgeschlossen haben.

Hinweis: Wenn eine andere Anwendung eine zweite Phase angefordert hat, kann diese vor, gleichzeitig mit oder nach der zweiten Phase Ihrer Anwendung aufgerufen werden.

Siehe auch isPhase2().

QStringList QSessionManager::restartCommand() const

Gibt den aktuell eingestellten Neustartbefehl zurück.

Siehe auch setRestartCommand() und restartHint().

QSessionManager::RestartHint QSessionManager::restartHint() const

Gibt den aktuellen Neustart-Hinweis der Anwendung zurück. Die Vorgabe ist RestartIfRunning.

Siehe auch setRestartHint().

QString QSessionManager::sessionId() const

Gibt den Bezeichner der aktuellen Sitzung zurück.

Wenn die Anwendung aus einer früheren Sitzung wiederhergestellt wurde, ist dieser Bezeichner derselbe wie in der früheren Sitzung.

Siehe auch sessionKey() und QGuiApplication::sessionId().

QString QSessionManager::sessionKey() const

Gibt den Sitzungsschlüssel der aktuellen Sitzung zurück.

Wurde die Anwendung aus einer früheren Sitzung wiederhergestellt, ist dieser Schlüssel derselbe wie beim Beenden der vorherigen Sitzung.

Der Sitzungsschlüssel ändert sich mit jedem Aufruf von commitData() oder saveState().

Siehe auch sessionId() und QGuiApplication::sessionKey().

void QSessionManager::setDiscardCommand(const QStringList &command)

Setzt den Befehl discard auf die angegebene command.

Siehe auch discardCommand() und setRestartCommand().

void QSessionManager::setManagerProperty(const QString &name, const QStringList &value)

Der Schreibzugriff auf die Identifikation und den Status der Anwendung wird im Sitzungsmanager gespeichert.

Der Wert der Eigenschaft name ist auf die String-Liste value festgelegt.

void QSessionManager::setManagerProperty(const QString &name, const QString &value)

Dies ist eine überladene Funktion.

Der Schreibzugriff auf die Identifizierungs- und Zustandsdatensätze der Anwendung auf niedriger Ebene wird im Sitzungsmanager gespeichert.

Der Wert der Eigenschaft name ist auf die Zeichenkette value festgelegt.

void QSessionManager::setRestartCommand(const QStringList &command)

Wenn der Sitzungsmanager in der Lage ist, Sitzungen wiederherzustellen, wird er command ausführen, um die Anwendung wiederherzustellen. Der Befehl ist standardmäßig auf

appname -session id

Die Option -session ist obligatorisch; andernfalls kann QGuiApplication nicht feststellen, ob die Sitzung wiederhergestellt wurde oder wie der aktuelle Sitzungsidentifikator lautet. Siehe QGuiApplication::isSessionRestored() und QGuiApplication::sessionId() für Details.

Wenn Ihre Anwendung sehr einfach ist, kann es möglich sein, den gesamten Anwendungsstatus in zusätzlichen Kommandozeilenoptionen zu speichern. Dies ist in der Regel eine sehr schlechte Idee, da Befehlszeilen oft auf einige hundert Bytes beschränkt sind. Verwenden Sie stattdessen QSettings, temporäre Dateien oder eine Datenbank für diesen Zweck. Wenn Sie die Daten mit dem eindeutigen sessionId() markieren, können Sie die Anwendung in einer späteren Sitzung wiederherstellen.

Siehe auch restartCommand(), setDiscardCommand(), und setRestartHint().

void QSessionManager::setRestartHint(QSessionManager::RestartHint hint)

Setzt den Neustart-Hinweis der Anwendung auf hint. Beim Starten der Anwendung wird der Hinweis auf RestartIfRunning gesetzt.

Hinweis: Diese Flags sind nur Hinweise, ein Sitzungsmanager kann sie beachten oder nicht.

Wir empfehlen, den Neustart-Hinweis in QGuiApplication::saveStateRequest() zu setzen, da die meisten Sitzungsmanager kurz nach dem Start einer Anwendung einen Checkpoint durchführen.

Siehe auch 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.