QSessionManager Class
La classe QSessionManager permet d'accéder au gestionnaire de session. Plus d'informations...
| En-tête : | #include <QSessionManager> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Gui)target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake : | QT += gui |
| Héritages : | QObject |
Types publics
| enum | RestartHint { RestartIfRunning, RestartAnyway, RestartImmediately, RestartNever } |
Fonctions publiques
| 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) |
Description détaillée
Un gestionnaire de session dans un environnement de bureau (dans lequel vivent les applications Qt GUI ) garde la trace d'une session, qui est un groupe d'applications en cours d'exécution, chacune d'entre elles ayant un état particulier. L'état d'une application contient notamment les documents ouverts par l'application, ainsi que la position et la taille de ses fenêtres.
Le gestionnaire de session est utilisé pour sauvegarder la session, par exemple lors de l'arrêt de la machine, et pour restaurer une session, par exemple lors du démarrage de la machine. Nous vous recommandons d'utiliser QSettings pour sauvegarder les paramètres d'une application, par exemple la position des fenêtres, les fichiers récemment utilisés, etc. Lorsque l'application est redémarrée par le gestionnaire de session, vous pouvez restaurer les paramètres.
QSessionManager fournit une interface entre l'application et le gestionnaire de session de la plate-forme. Dans Qt XML, les demandes d'action du gestionnaire de session sont traitées par les deux signaux QGuiApplication::commitDataRequest() et QGuiApplication::saveStateRequest(). Tous deux fournissent une référence à un objet QSessionManager en tant qu'argument. Le gestionnaire de session n'est accessible que dans les slots invoqués par ces signaux.
Aucune interaction avec l'utilisateur n'est possible à moins que l'application n'obtienne l'autorisation explicite du gestionnaire de session. Vous demandez cette autorisation en appelant allowsInteraction() ou, si c'est vraiment urgent, allowsErrorInteraction(). Qt n'impose pas cela, mais le gestionnaire de session peut le faire.
Vous pouvez essayer d'interrompre le processus d'arrêt en appelant cancel().
Pour les gestionnaires de session sophistiqués fournis sur Unix/X11, QSessionManager offre d'autres possibilités pour affiner le comportement de gestion de session d'une application : setRestartCommand(), setDiscardCommand(), setRestartHint(), setProperty(), requestPhase2(). Voir les descriptions des fonctions respectives pour plus de détails.
Voir également QGuiApplication et Session Management.
Documentation sur les types de membres
enum QSessionManager::RestartHint
Ce type d'énumération définit les circonstances dans lesquelles cette application souhaite être redémarrée par le gestionnaire de session. Les valeurs actuelles sont les suivantes
| Constante | Valeur | Description |
|---|---|---|
QSessionManager::RestartIfRunning | 0 | Si l'application est toujours en cours d'exécution lorsque la session est fermée, elle doit être redémarrée au début de la session suivante. |
QSessionManager::RestartAnyway | 1 | L'application doit être démarrée au début de la session suivante, quoi qu'il arrive. (Ceci est utile pour les utilitaires qui s'exécutent juste après le démarrage et qui se terminent ensuite). |
QSessionManager::RestartImmediately | 2 | L'application doit être démarrée immédiatement lorsqu'elle n'est pas en cours d'exécution. |
QSessionManager::RestartNever | 3 | L'application ne veut pas être redémarrée automatiquement. |
L'indice par défaut est RestartIfRunning.
Documentation sur les fonctions membres
bool QSessionManager::allowsErrorInteraction()
Renvoie true si l'interaction avec les erreurs est autorisée ; sinon, renvoie false.
Cette méthode est similaire à allowsInteraction(), mais elle permet également à l'application d'informer l'utilisateur des erreurs qui se produisent. Les gestionnaires de session peuvent accorder une priorité plus élevée aux demandes d'interaction avec les erreurs, ce qui signifie qu'il est plus probable qu'une interaction avec les erreurs soit autorisée. Cependant, vous n'avez toujours pas la garantie que le gestionnaire de session autorisera l'interaction.
Voir également allowsInteraction(), release() et cancel().
bool QSessionManager::allowsInteraction()
Demande au gestionnaire de session l'autorisation d'interagir avec l'utilisateur. Retourne true si l'interaction est autorisée, sinon retourne false.
La raison d'être de ce mécanisme est de permettre de synchroniser l'interaction avec l'utilisateur au cours d'un arrêt. Les gestionnaires de session avancés peuvent demander simultanément à toutes les applications de valider leurs données, ce qui accélère considérablement l'arrêt.
Lorsque l'interaction est terminée, nous recommandons vivement de libérer le sémaphore d'interaction utilisateur par un appel à release(). De cette manière, d'autres applications peuvent avoir la possibilité d'interagir avec l'utilisateur pendant que votre application est encore occupée à enregistrer des données. (Le sémaphore est implicitement libéré lorsque l'application se termine).
Si l'utilisateur décide d'annuler le processus d'arrêt pendant la phase d'interaction, vous devez en informer le gestionnaire de session en appelant cancel().
Voici un exemple d'implémentation de la fonction QGuiApplication::commitDataRequest() d'une application :
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::Enregistrer | QMessageBox::Discard | QMessageBox::Cancel) ; switch (ret) { case QMessageBox::Save : manager.release() ; if (!saveDocument()) manager.cancel() ; break; case ::Discard : break ; case QMessageBox::Discard : break; case QMessageBox::Cancel : default: manager.cancel() ; } } else { // nous n'avons pas eu la permission d'interagir, alors // faites quelque chose de raisonnable à la place} }
Si une erreur s'est produite dans l'application lors de l'enregistrement des données, vous pouvez essayer allowsErrorInteraction() à la place.
Voir également QGuiApplication::commitDataRequest(), release() et cancel().
void QSessionManager::cancel()
Indique au gestionnaire de session d'annuler le processus d'arrêt. Les applications ne doivent pas appeler cette fonction sans demander l'avis de l'utilisateur.
Voir également allowsInteraction() et allowsErrorInteraction().
QStringList QSessionManager::discardCommand() const
Renvoie la commande de rejet actuellement définie.
Voir aussi setDiscardCommand(), restartCommand() et setRestartCommand().
bool QSessionManager::isPhase2() const
Renvoie true si le gestionnaire de session est en train d'effectuer une deuxième phase de gestion de session ; sinon, renvoie false.
Voir également requestPhase2().
void QSessionManager::release()
Libère le sémaphore d'interaction du gestionnaire de session après une phase d'interaction.
Voir également allowsInteraction() et allowsErrorInteraction().
void QSessionManager::requestPhase2()
Demande une deuxième phase de gestion de session pour l'application. L'application peut alors revenir immédiatement de la fonction QGuiApplication::commitDataRequest() ou QApplication::saveStateRequest(), qui seront appelées à nouveau une fois que la plupart ou toutes les autres applications auront terminé leur gestion de session.
Les deux phases sont utiles pour les applications telles que le gestionnaire de fenêtres X11 qui doivent stocker des informations sur les fenêtres d'une autre application et qui doivent donc attendre que ces applications aient terminé leurs tâches respectives de gestion de session.
Remarque : si une autre application a demandé une deuxième phase, elle peut être appelée avant, simultanément ou après la deuxième phase de votre application.
Voir également isPhase2().
QStringList QSessionManager::restartCommand() const
Renvoie la commande de redémarrage actuellement définie.
Voir aussi setRestartCommand() et restartHint().
QSessionManager::RestartHint QSessionManager::restartHint() const
Renvoie l'indice de redémarrage actuel de l'application. La valeur par défaut est RestartIfRunning.
Voir aussi setRestartHint().
QString QSessionManager::sessionId() const
Renvoie l'identifiant de la session en cours.
Si l'application a été restaurée à partir d'une session antérieure, cet identifiant est le même que celui de la session antérieure.
Voir aussi sessionKey() et QGuiApplication::sessionId().
QString QSessionManager::sessionKey() const
Renvoie la clé de session de la session en cours.
Si l'application a été restaurée à partir d'une session antérieure, cette clé est la même qu'à la fin de la session précédente.
La clé de session change à chaque appel de commitData() ou saveState().
Voir également sessionId() et QGuiApplication::sessionKey().
void QSessionManager::setDiscardCommand(const QStringList &command)
Définit la commande de rejet à l'adresse command.
Voir aussi discardCommand() et setRestartCommand().
void QSessionManager::setManagerProperty(const QString &name, const QStringList &value)
L'accès en écriture de bas niveau à l'identification de l'application et à l'enregistrement de l'état est conservé dans le gestionnaire de session.
La propriété appelée name a pour valeur la liste de chaînes value.
void QSessionManager::setManagerProperty(const QString &name, const QString &value)
L'accès en écriture de bas niveau aux enregistrements d'identification et d'état de l'application est conservé dans le gestionnaire de session.
La propriété appelée name a pour valeur la chaîne de caractères value.
Il s'agit d'une fonction surchargée.
void QSessionManager::setRestartCommand(const QStringList &command)
Si le gestionnaire de session est capable de restaurer des sessions, il exécutera command afin de restaurer l'application. La commande est par défaut
appname -session id
L'option -session est obligatoire, sinon QGuiApplication ne peut pas savoir s'il a été restauré ou quel est l'identifiant de la session en cours. Voir QGuiApplication::isSessionRestored() et QGuiApplication::sessionId() pour plus de détails.
Si votre application est très simple, il peut être possible de stocker tout l'état de l'application dans des options de ligne de commande supplémentaires. C'est généralement une très mauvaise idée, car les lignes de commande sont souvent limitées à quelques centaines d'octets. Utilisez plutôt QSettings, des fichiers temporaires ou une base de données. En marquant les données avec l'unique sessionId(), vous pourrez restaurer l'application lors d'une prochaine session.
Voir également restartCommand(), setDiscardCommand() et setRestartHint().
void QSessionManager::setRestartHint(QSessionManager::RestartHint hint)
Définit l'indice de redémarrage de l'application à hint. Au démarrage de l'application, l'indice est fixé à RestartIfRunning.
Remarque : ces drapeaux ne sont que des indications, un gestionnaire de session peut les respecter ou non.
Nous recommandons de définir l'indice de redémarrage dans QGuiApplication::saveStateRequest() car la plupart des gestionnaires de session effectuent un point de contrôle peu de temps après le démarrage d'une application.
Voir également 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.