QSessionManager Class
Die Klasse „QSessionManager“ ermöglicht den Zugriff auf den Sitzungsmanager. Mehr...
| Header: | #include <QSessionManager> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake: | QT += gui |
| Erbt von: | 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) |
Ausführliche Beschreibung
Ein Sitzungsmanager in einer Desktop-Umgebung (in der „ Qt GUI “-Anwendungen ausgeführt werden) verwaltet eine Sitzung, d. h. eine Gruppe laufender Anwendungen, von denen jede einen bestimmten Zustand aufweist. Der Zustand einer Anwendung umfasst (vor allem) die von der Anwendung geöffneten Dokumente sowie die Position und Größe ihrer Fenster.
Der Sitzungsmanager dient dazu, die Sitzung zu speichern, z. B. beim Herunterfahren des Computers, und eine Sitzung wiederherzustellen, z. B. beim Hochfahren des Computers. Wir empfehlen, die Funktion ` QSettings ` zum Speichern der Einstellungen einer Anwendung zu verwenden, beispielsweise Fensterpositionen, zuletzt verwendete Dateien usw. Wenn die Anwendung vom Sitzungsmanager neu gestartet wird, können Sie die Einstellungen wiederherstellen.
QSessionManager stellt eine Schnittstelle zwischen der Anwendung und dem Sitzungsmanager der Plattform bereit. In Qt werden Aktionsanforderungen der Sitzungsverwaltung durch die beiden Signale „ QGuiApplication::commitDataRequest()“ und „ QGuiApplication::saveStateRequest()“ abgewickelt. Beide übergeben als Argument einen Verweis auf ein QSessionManager-Objekt. Auf den Sitzungsmanager kann nur in Slots zugegriffen werden, die durch diese Signale aufgerufen werden.
Eine Benutzerinteraktion ist nur möglich , wenn die Anwendung eine ausdrückliche Erlaubnis vom Sitzungsmanager erhält. Sie fordern diese Erlaubnis durch den Aufruf von ` allowsInteraction()` an oder, falls es wirklich dringend ist, durch ` allowsErrorInteraction()`. Qt erzwingt dies nicht, der Sitzungsmanager jedoch möglicherweise schon.
Sie können versuchen, den Herunterfahrvorgang durch den Aufruf von ` cancel()` abzubrechen.
Für komplexe Sitzungsmanager unter Unix/X11 bietet QSessionManager weitere Möglichkeiten zur Feinabstimmung des Sitzungsverwaltungs-Verhaltens einer Anwendung: ` setRestartCommand()`, ` setDiscardCommand()`, ` setRestartHint()`, ` setProperty()`, ` requestPhase2()`. Weitere Details finden Sie in den jeweiligen Funktionsbeschreibungen.
Siehe auch QGuiApplication und Sitzungsverwaltung.
Dokumentation zu 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:
| Konstante | Wert | Beschreibung |
|---|---|---|
QSessionManager::RestartIfRunning | 0 | Wenn die Anwendung beim Beenden der Sitzung noch läuft, soll sie zu Beginn der nächsten Sitzung neu gestartet werden. |
QSessionManager::RestartAnyway | 1 | Die Anwendung soll zu Beginn der nächsten Sitzung auf jeden Fall gestartet werden. (Dies ist nützlich für Dienstprogramme, die unmittelbar nach dem Systemstart ausgeführt werden und sich anschließend beenden.) |
QSessionManager::RestartImmediately | 2 | Die Anwendung soll sofort gestartet werden, sobald sie nicht läuft. |
QSessionManager::RestartNever | 3 | Die Anwendung soll nicht automatisch neu gestartet werden. |
Der Standardhinweis lautet „ RestartIfRunning “.
Dokumentation der Member-Funktionen
bool QSessionManager::allowsErrorInteraction()
Gibt „ true “ zurück, wenn Fehlerinteraktionen zulässig sind; andernfalls wird „ false “ zurückgegeben.
Dies ähnelt der Funktion ` allowsInteraction()`, ermöglicht es der Anwendung jedoch zusätzlich, den Benutzer über auftretende Fehler zu informieren. Sitzungsmanager können Anfragen zur Fehlerinteraktion eine höhere Priorität zuweisen, was bedeutet, dass die Wahrscheinlichkeit größer ist, dass eine Fehlerinteraktion zugelassen wird. Es gibt jedoch keine Garantie dafür, dass der Sitzungsmanager die Interaktion zulässt.
Siehe auch allowsInteraction(), release() und cancel().
bool QSessionManager::allowsInteraction()
Fordert beim Sitzungsmanager die Erlaubnis zur Interaktion mit dem Benutzer an. Gibt „true“ zurück, wenn die Interaktion erlaubt ist; andernfalls wird „ false “ zurückgegeben.
Der Grund für diesen Mechanismus besteht darin, die Synchronisierung der Benutzerinteraktion während eines Herunterfahrens zu ermöglichen. Fortgeschrittene Sitzungsmanager können alle Anwendungen gleichzeitig auffordern, ihre Daten zu speichern, was zu einem deutlich schnelleren Herunterfahren führt.
Nach Abschluss der Interaktion empfehlen wir dringend, den Semaphor für die Benutzerinteraktion mit einem Aufruf von ` release()` freizugeben. Auf diese Weise erhalten andere Anwendungen die Möglichkeit, mit dem Benutzer zu interagieren, während Ihre Anwendung noch mit dem Speichern von Daten beschäftigt ist. (Der Semaphor wird implizit freigegeben, wenn die Anwendung beendet wird.)
Wenn der Benutzer beschließt, den Herunterfahrvorgang während der Interaktionsphase abzubrechen, müssen Sie dem Sitzungsmanager dies durch einen Aufruf von ` cancel()` mitteilen.
Hier ist ein Beispiel dafür, wie die Funktion ` QGuiApplication::commitDataRequest()` einer Anwendung implementiert werden könnte:
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("Meine Anwendung"),
tr("Änderungen im Dokument speichern?"),
QMessageBox::Speichern | QMessageBox::Verwerfen | QMessageBox::Cancel);
switch (ret) {
case QMessageBox::Save:
manager.release();
if (!saveDocument())
manager.cancel();
break;
case QMessageBox::Verwerfen:
break;
case QMessageBox::Abbrechen:
default:
manager.cancel();
}
} else {
// Wir haben keine Berechtigung zur Interaktion erhalten, daher
// führen wir stattdessen eine sinnvolle Alternative aus
}
}Wenn beim Speichern der Daten innerhalb der Anwendung ein Fehler aufgetreten ist, sollten Sie stattdessen allowsErrorInteraction() ausprobieren.
Siehe auch QGuiApplication::commitDataRequest(), release() und cancel().
void QSessionManager::cancel()
Weist den Sitzungsmanager an, den Herunterfahrvorgang abzubrechen. Anwendungen sollten diese Funktion nicht aufrufen, ohne zuvor den Benutzer zu fragen.
Siehe auch allowsInteraction() und allowsErrorInteraction().
QStringList QSessionManager::discardCommand() const
Gibt den aktuell festgelegten „Discard“-Befehl zurück.
Siehe auch setDiscardCommand(), restartCommand() und setRestartCommand().
bool QSessionManager::isPhase2() const
Gibt „ true “ zurück, wenn der Sitzungsmanager derzeit eine zweite Phase der Sitzungsverwaltung durchführt; andernfalls wird „ false “ zurückgegeben.
Siehe auch requestPhase2().
void QSessionManager::release()
Gibt das Interaktionssemaphor 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 aus der Funktion „ QGuiApplication::commitDataRequest()“ oder „ QApplication::saveStateRequest()“ zurückkehren; diese Funktionen 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 anderer Anwendungen 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 festgelegten Neustartbefehl zurück.
Siehe auch setRestartCommand() und restartHint().
QSessionManager::RestartHint QSessionManager::restartHint() const
Gibt den aktuellen Neustart-Hinweis der Anwendung zurück. Der Standardwert lautet „ RestartIfRunning “.
Siehe auch ` setRestartHint()`.
QString QSessionManager::sessionId() const
Gibt die Kennung der aktuellen Sitzung zurück.
Wenn die Anwendung aus einer früheren Sitzung wiederhergestellt wurde, entspricht diese Kennung derjenigen aus 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, entspricht dieser Schlüssel demjenigen, der zum Zeitpunkt des Endes der vorherigen Sitzung gültig war.
Der Sitzungsschlüssel ändert sich bei jedem Aufruf von `commitData()` oder `saveState()`.
Siehe auch ` sessionId()` und ` QGuiApplication::sessionKey()`.
void QSessionManager::setDiscardCommand(const QStringList &command)
Setzt den Befehl „discard“ auf den angegebenen Wert „ command “.
Siehe auch „ discardCommand()“ und „ setRestartCommand()“.
void QSessionManager::setManagerProperty(const QString &name, const QStringList &value)
Der Schreibzugriff auf niedriger Ebene auf den Identifikations- und Statusdatensatz der Anwendung wird im Sitzungsmanager verwaltet.
Der Wert der Eigenschaft „ name “ ist auf die Zeichenfolgenliste „ value “ gesetzt.
void QSessionManager::setManagerProperty(const QString &name, const QString &value)
Der Schreibzugriff auf niedriger Ebene auf die Identifikations- und Statusdatensätze der Anwendung wird im Sitzungsmanager verwaltet.
Der Wert der Eigenschaft „ name “ ist auf die Zeichenkette „ value “ gesetzt.
Dies ist eine überladene Funktion.
void QSessionManager::setRestartCommand(const QStringList &command)
Wenn der Sitzungsmanager in der Lage ist, Sitzungen wiederherzustellen, führt er den Befehl „ command “ aus, um die Anwendung wiederherzustellen. Der Befehl lautet standardmäßig
appname -session idDie Option „ -session “ ist obligatorisch; andernfalls kann „ QGuiApplication “ nicht erkennen, ob eine Wiederherstellung stattgefunden hat oder wie die aktuelle Sitzungskennung lautet. Weitere Informationen finden Sie unter QGuiApplication::isSessionRestored() und QGuiApplication::sessionId().
Wenn Ihre Anwendung sehr einfach ist, lässt sich der gesamte Anwendungszustand möglicherweise in zusätzlichen Befehlszeilenoptionen speichern. Dies ist in der Regel keine gute Idee, da Befehlszeilen oft auf wenige hundert Byte begrenzt sind. Verwenden Sie stattdessen „ QSettings “, temporäre Dateien oder eine Datenbank für diesen Zweck. Indem Sie die Daten mit dem eindeutigen „ sessionId()“ kennzeichnen, 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 Start der Anwendung wird der Hinweis auf „ RestartIfRunning “ gesetzt.
Hinweis: Diese Flags sind lediglich Hinweise; ein Sitzungsmanager kann sie berücksichtigen oder auch nicht.
Wir empfehlen, den Neustart-Hinweis in ` QGuiApplication::saveStateRequest()` festzulegen, da die meisten Sitzungsmanager kurz nach dem Start einer Anwendung einen Checkpoint durchführen.
Siehe auch ` 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.