QSessionManager Class
La clase QSessionManager proporciona acceso al gestor de sesiones. Más...
| Cabecera: | #include <QSessionManager> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui)target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake: | QT += gui |
| Hereda: | QObject |
Tipos Públicos
| enum | RestartHint { RestartIfRunning, RestartAnyway, RestartImmediately, RestartNever } |
Funciones Públicas
| 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) |
Descripción detallada
Un gestor de sesiones en un entorno de escritorio (en el que viven las aplicaciones Qt GUI ) realiza un seguimiento de una sesión, que es un grupo de aplicaciones en ejecución, cada una de las cuales tiene un estado particular. El estado de una aplicación contiene (sobre todo) los documentos que la aplicación tiene abiertos y la posición y tamaño de sus ventanas.
El gestor de sesiones se utiliza para guardar la sesión, por ejemplo, cuando se apaga la máquina, y para restaurar una sesión, por ejemplo, cuando se arranca la máquina. Se recomienda utilizar QSettings para guardar la configuración de una aplicación, por ejemplo, las posiciones de las ventanas, los archivos utilizados recientemente, etc. Cuando el gestor de sesiones reinicie la aplicación, podrás restaurar la configuración.
QSessionManager proporciona una interfaz entre la aplicación y el gestor de sesiones de la plataforma. En Qt, las peticiones de acción del gestor de sesiones se gestionan mediante las dos señales QGuiApplication::commitDataRequest() y QGuiApplication::saveStateRequest(). Ambas proporcionan una referencia a un objeto QSessionManager como argumento. Sólo se puede acceder al gestor de sesiones en las ranuras invocadas por estas señales.
No es posible ninguna interacción con el usuario a menos que la aplicación obtenga permiso explícito del gestor de sesiones. El permiso se solicita llamando a allowsInteraction() o, si es realmente urgente, a allowsErrorInteraction(). Qt no impone esto, pero el gestor de sesiones puede hacerlo.
Puedes intentar abortar el proceso de cierre llamando a cancel().
Para gestores de sesión sofisticados proporcionados en Unix/X11, QSessionManager ofrece más posibilidades para ajustar el comportamiento de la gestión de sesión de una aplicación: setRestartCommand(), setDiscardCommand(), setRestartHint(), setProperty(), requestPhase2(). Para más información, consulte las descripciones de las funciones correspondientes.
Véase también QGuiApplication y Gestión de sesiones.
Documentación de tipos de miembros
enum QSessionManager::RestartHint
Este tipo enum define las circunstancias en las que esta aplicación desea ser reiniciada por el gestor de sesiones. Los valores actuales son
| Constante | Valor | Descripción |
|---|---|---|
QSessionManager::RestartIfRunning | 0 | Si la aplicación sigue en ejecución cuando se cierra la sesión, desea que se reinicie al comienzo de la siguiente sesión. |
QSessionManager::RestartAnyway | 1 | La aplicación quiere iniciarse al comienzo de la siguiente sesión, pase lo que pase. (Esto es útil para utilidades que se ejecutan justo después del inicio y luego se cierran). |
QSessionManager::RestartImmediately | 2 | La aplicación quiere iniciarse inmediatamente siempre que no se esté ejecutando. |
QSessionManager::RestartNever | 3 | La aplicación no quiere reiniciarse automáticamente. |
La sugerencia por defecto es RestartIfRunning.
Documentación de las funciones miembro
bool QSessionManager::allowsErrorInteraction()
Devuelve true si se permite la interacción con el error; en caso contrario, devuelve false.
Esto es similar a allowsInteraction(), pero también permite a la aplicación informar al usuario de cualquier error que se produzca. Los gestores de sesión pueden dar mayor prioridad a las peticiones de interacción de error, lo que significa que es más probable que se permita una interacción de error. Sin embargo, aún no está garantizado que el gestor de sesión permita la interacción.
Véase también allowsInteraction(), release(), y cancel().
bool QSessionManager::allowsInteraction()
Solicita al gestor de sesión permiso para interactuar con el usuario. Devuelve true si la interacción está permitida; en caso contrario, devuelve false.
La razón de ser de este mecanismo es permitir sincronizar la interacción con el usuario durante un cierre. Los gestores de sesión avanzados pueden pedir a todas las aplicaciones simultáneamente que consignen sus datos, lo que resulta en un apagado mucho más rápido.
Una vez finalizada la interacción, recomendamos encarecidamente liberar el semáforo de interacción del usuario con una llamada a release(). De esta forma, otras aplicaciones pueden tener la oportunidad de interactuar con el usuario mientras tu aplicación está todavía ocupada guardando datos. (El semáforo se libera implícitamente cuando la aplicación sale).
Si el usuario decide cancelar el proceso de cierre durante la fase de interacción, debes informar al gestor de sesiones de que esto ha ocurrido llamando a cancel().
He aquí un ejemplo de cómo podría implementarse QGuiApplication::commitDataRequest() en una aplicación:
MyMainWidget::MyMainWidget(QWidget *parent) : QWidget(padre){ connect(qApp, &QGuiApplication::commitDataRequest, this, &MyMainWidget::commitData); }void MyMainWidget::commitData(QSessionManager& manager) { if (manager.allowsInteraction()) { int ret = QMessageBox::warning( mainWindow,tr("Mi aplicación"),tr("¿Guardar cambios en el documento?"), QMessageBox::Guardar | QMessageBox::Descartar | ::Cancelar QMessageBox::Cancelar); switch (ret) { case QMessageBox::Guardar: manager.release(); if (!saveDocument()) manager.cancel(); break; case QMessageBox::Descartar: break; case QMessageBox::Cancelar: por defecto: manager.cancel(); } } else { // no hemos obtenido permiso para interactuar, entonces // haz algo razonable en su lugar} }
Si se ha producido un error dentro de la aplicación mientras guardaba sus datos, puede intentar allowsErrorInteraction() en su lugar.
Véase también QGuiApplication::commitDataRequest(), release(), y cancel().
void QSessionManager::cancel()
Indica al gestor de sesiones que cancele el proceso de apagado. Las aplicaciones no deben llamar a esta función sin preguntar antes al usuario.
Véase también allowsInteraction() y allowsErrorInteraction().
QStringList QSessionManager::discardCommand() const
Devuelve el comando de descarte establecido actualmente.
Véase también setDiscardCommand(), restartCommand() y setRestartCommand().
bool QSessionManager::isPhase2() const
Devuelve true si el gestor de sesiones está realizando actualmente una segunda fase de gestión de sesión; en caso contrario devuelve false.
Véase también requestPhase2().
void QSessionManager::release()
Libera el semáforo de interacción del gestor de sesiones después de una fase de interacción.
Véase también allowsInteraction() y allowsErrorInteraction().
void QSessionManager::requestPhase2()
Solicita una segunda fase de gestión de sesión para la aplicación. La aplicación puede entonces volver inmediatamente de la función QGuiApplication::commitDataRequest() o QApplication::saveStateRequest(), y serán llamadas de nuevo una vez que la mayoría o todas las demás aplicaciones hayan terminado su gestión de sesión.
Las dos fases son útiles para aplicaciones como el gestor de ventanas X11 que necesitan almacenar información sobre las ventanas de otra aplicación y, por lo tanto, tienen que esperar hasta que estas aplicaciones hayan terminado sus respectivas tareas de gestión de sesiones.
Nota: Si otra aplicación ha solicitado una segunda fase, ésta puede ser llamada antes, simultáneamente o después de la segunda fase de tu aplicación.
Véase también isPhase2().
QStringList QSessionManager::restartCommand() const
Devuelve el comando de reinicio establecido actualmente.
Véase también setRestartCommand() y restartHint().
QSessionManager::RestartHint QSessionManager::restartHint() const
Devuelve la pista de reinicio actual de la aplicación. Por defecto es RestartIfRunning.
Véase también setRestartHint().
QString QSessionManager::sessionId() const
Devuelve el identificador de la sesión actual.
Si la aplicación ha sido restaurada desde una sesión anterior, este identificador es el mismo que tenía en la sesión anterior.
Véase también sessionKey() y QGuiApplication::sessionId().
QString QSessionManager::sessionKey() const
Devuelve la clave de la sesión actual.
Si la aplicación se ha restaurado desde una sesión anterior, esta clave es la misma que cuando finalizó la sesión anterior.
La clave de sesión cambia con cada llamada a commitData() o saveState().
Véase también sessionId() y QGuiApplication::sessionKey().
void QSessionManager::setDiscardCommand(const QStringList &command)
Establece el comando de descarte en el command dado.
Véase también discardCommand() y setRestartCommand().
void QSessionManager::setManagerProperty(const QString &name, const QStringList &value)
El acceso de escritura de bajo nivel al registro de identificación y estado de la aplicación se mantiene en el gestor de sesiones.
La propiedad llamada name tiene su valor establecido a la lista de cadenas value.
void QSessionManager::setManagerProperty(const QString &name, const QString &value)
El acceso de escritura de bajo nivel a los registros de identificación y estado de la aplicación se mantiene en el gestor de sesiones.
La propiedad llamada name tiene su valor establecido a la cadena value.
Se trata de una función sobrecargada.
void QSessionManager::setRestartCommand(const QStringList &command)
Si el gestor de sesiones es capaz de restaurar sesiones, ejecutará command para restaurar la aplicación. El comando por defecto es
appname -session id
La opción -session es obligatoria; de lo contrario, QGuiApplication no puede saber si se ha restaurado o cuál es el identificador de sesión actual. Consulte QGuiApplication::isSessionRestored() y QGuiApplication::sessionId() para más detalles.
Si su aplicación es muy simple, puede ser posible almacenar todo el estado de la aplicación en opciones adicionales de la línea de comandos. Esto suele ser una muy mala idea porque las líneas de comandos suelen estar limitadas a unos pocos cientos de bytes. En su lugar, utilice QSettings, archivos temporales o una base de datos para este propósito. Marcando los datos con el único sessionId(), podrá restaurar la aplicación en una sesión futura.
Véase también restartCommand(), setDiscardCommand() y setRestartHint().
void QSessionManager::setRestartHint(QSessionManager::RestartHint hint)
Establece la sugerencia de reinicio de la aplicación en hint. Al iniciar la aplicación, la sugerencia se establece en RestartIfRunning.
Nota: Estos indicadores son sólo sugerencias, un gestor de sesiones puede o no respetarlos.
Recomendamos establecer la sugerencia de reinicio en QGuiApplication::saveStateRequest() porque la mayoría de los gestores de sesión realizan un punto de control poco después del inicio de una aplicación.
Véase también 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.