QSessionManager Class
QSessionManager 클래스는 세션 관리자에 대한 액세스를 제공합니다. 더 보기...
Header: | #include <QSessionManager> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
qmake: | QT += gui |
상속합니다: | 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() 두 신호에 의해 처리됩니다. 둘 다 QSessionManager 객체에 대한 참조를 인수로 제공합니다. 세션 관리자는 이 신호에 의해 호출된 슬롯에서만 액세스할 수 있습니다.
애플리케이션이 세션 관리자로부터 명시적인 권한을 얻지 않으면 사용자 상호 작용이 불가능합니다. allowsInteraction () 또는 정말 긴급한 경우 allowsErrorInteraction()을 호출하여 권한을 요청합니다. Qt는 이를 강제하지 않지만 세션 관리자는 강제할 수 있습니다.
cancel()를 호출하여 종료 프로세스를 중단할 수 있습니다.
Unix/X11에서 제공되는 정교한 세션 관리자의 경우, QSessionManager는 애플리케이션의 세션 관리 동작을 미세 조정할 수 있는 추가 기능을 제공합니다: setRestartCommand(), setDiscardCommand(), setRestartHint(), setProperty(), requestPhase2(). 자세한 내용은 각 기능 설명을 참조하세요.
QGuiApplication 및 세션 관리도참조하세요 .
멤버 유형 문서
enum QSessionManager::RestartHint
이 열거형 유형은 세션 관리자가 이 애플리케이션을 다시 시작하려는 상황을 정의합니다. 현재 값은 다음과 같습니다:
Constant | 값 | 설명 |
---|---|---|
QSessionManager::RestartIfRunning | 0 | 세션이 종료될 때 애플리케이션이 여전히 실행 중인 경우 다음 세션이 시작될 때 애플리케이션을 다시 시작합니다. |
QSessionManager::RestartAnyway | 1 | 애플리케이션은 무슨 일이 있어도 다음 세션이 시작될 때 시작되기를 원합니다. (시작 직후 실행되었다가 종료되는 유틸리티에 유용합니다.) |
QSessionManager::RestartImmediately | 2 | 애플리케이션이 실행 중이 아닐 때마다 즉시 시작되기를 원합니다. |
QSessionManager::RestartNever | 3 | 애플리케이션이 자동으로 다시 시작되는 것을 원하지 않습니다. |
기본 힌트는 RestartIfRunning
입니다.
멤버 함수 문서
bool QSessionManager::allowsErrorInteraction()
오류 상호 작용이 허용되면 true
을 반환하고, 그렇지 않으면 false
을 반환합니다.
이는 allowsInteraction()와 유사하지만 애플리케이션이 사용자에게 발생하는 오류에 대해 알려줄 수 있습니다. 세션 관리자는 오류 상호작용 요청에 더 높은 우선순위를 부여할 수 있으므로 오류 상호작용이 허용될 가능성이 더 높습니다. 그러나 세션 관리자가 상호작용을 허용한다는 보장은 없습니다.
allowsInteraction(), release() 및 cancel()도 참조하세요 .
bool QSessionManager::allowsInteraction()
세션 관리자에게 사용자와 상호 작용할 수 있는 권한을 요청합니다. 상호 작용이 허용되면 true를 반환하고, 그렇지 않으면 false
를 반환합니다.
이 메커니즘의 근거는 종료 중에도 사용자 상호작용을 동기화할 수 있도록 하기 위한 것입니다. 고급 세션 관리자는 모든 애플리케이션에 동시에 데이터를 커밋하도록 요청할 수 있으므로 종료 속도가 훨씬 빨라집니다.
상호작용이 완료되면 release()를 호출하여 사용자 상호작용 세마포를 해제하는 것이 좋습니다. 이렇게 하면 애플리케이션이 여전히 데이터를 저장하는 동안 다른 애플리케이션이 사용자와 상호 작용할 기회를 얻을 수 있습니다. (세마포어는 애플리케이션이 종료될 때 암시적으로 해제됩니다.)
사용자가 상호 작용 단계에서 종료 프로세스를 취소하기로 결정한 경우 cancel()를 호출하여 세션 관리자에게 이러한 상황이 발생했음을 알려야 합니다.
다음은 애플리케이션의 QGuiApplication::commitDataRequest()가 어떻게 구현되는지 보여주는 예시입니다:
MyMainWidget::MyMainWidget(QWidget *부모) : QWidget(부모){ connect(qApp, &QGuiApplication::commitDataRequest, this, &MyMainWidget::commitData); }void MyMainWidget::commitData(QSessionManager& manager) { if (manager.allowsInteraction()) { int ret = QMessageBox::warning( mainWindow,tr("내 애플리케이션"),tr("문서에 변경 사항을 저장하시겠습니까?"), QMessageBox::저장 | QMessageBox::Discard | QMessageBox::취소); switch (ret) { case QMessageBox::Save: manager.release(); if (!saveDocument()) manager.cancel(); break; case QMessageBox::Discard: break; case QMessageBox::Cancel: default: manager.cancel(); } } else { // 인터랙션 권한을 얻지 못했으니 // 대신 합리적인 작업을 수행합니다} }
데이터를 저장하는 동안 애플리케이션 내에서 오류가 발생한 경우 allowsErrorInteraction()를 대신 사용해 볼 수 있습니다.
QGuiApplication::commitDataRequest(), release(), cancel()도 참조하세요 .
void QSessionManager::cancel()
세션 관리자에게 종료 프로세스를 취소하도록 지시합니다. 애플리케이션은 사용자에게 먼저 묻지 않고 이 함수를 호출해서는 안 됩니다.
allowsInteraction() 및 allowsErrorInteraction()도 참조하세요 .
QStringList QSessionManager::discardCommand() const
현재 설정된 삭제 명령을 반환합니다.
setDiscardCommand(), restartCommand() 및 setRestartCommand()도 참조하세요 .
bool QSessionManager::isPhase2() const
세션 관리자가 현재 두 번째 세션 관리 단계를 수행 중이면 true
을 반환하고, 그렇지 않으면 false
을 반환합니다.
requestPhase2()도 참조하세요 .
void QSessionManager::release()
상호작용 단계 후 세션 관리자의 상호작용 세마포를 해제합니다.
allowsInteraction() 및 allowsErrorInteraction()도 참조하세요 .
void QSessionManager::requestPhase2()
애플리케이션에 대한 두 번째 세션 관리 단계를 요청합니다. 그러면 애플리케이션은 QGuiApplication::commitDataRequest() 또는 QApplication::saveStateRequest() 함수에서 즉시 반환될 수 있으며, 대부분의 또는 모든 다른 애플리케이션이 세션 관리를 완료하면 다시 호출됩니다.
이 두 단계는 다른 애플리케이션의 창에 대한 정보를 저장해야 하므로 해당 애플리케이션이 각각의 세션 관리 작업을 완료할 때까지 기다려야 하는 X11 창 관리자와 같은 애플리케이션에 유용합니다.
참고: 다른 애플리케이션이 두 번째 단계를 요청한 경우 애플리케이션의 두 번째 단계 이전, 동시에 또는 이후에 호출될 수 있습니다.
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()도 참조하세요 .
© 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.