이 페이지에서

QSessionManager Class

QSessionManager 클래스는 세션 관리자에 대한 액세스를 제공합니다. 더 보기...

헤더: #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

이 열거형 유형은 세션 관리자가 이 애플리케이션을 재시작해야 하는 상황을 정의합니다. 현재 값은 다음과 같습니다.

상수값설명
QSessionManager::RestartIfRunning0세션이 종료될 때 애플리케이션이 여전히 실행 중이라면, 다음 세션이 시작될 때 다시 시작되기를 원합니다.
QSessionManager::RestartAnyway1어떤 상황이든 상관없이 다음 세션이 시작될 때 애플리케이션이 시작되기를 원합니다. (이는 시작 직후 실행된 후 종료되는 유틸리티에 유용합니다.)
QSessionManager::RestartImmediately2애플리케이션이 실행 중이 아닐 때마다 즉시 시작되기를 원합니다.
QSessionManager::RestartNever3애플리케이션이 자동으로 다시 시작되지 않도록 하려면 이 옵션을 선택합니다.

기본 힌트는 ` RestartIfRunning`입니다.

멤버 함수 문서

bool QSessionManager::allowsErrorInteraction()

오류 상호작용이 허용된 경우 ` true `를 반환하고, 그렇지 않은 경우 ` false`를 반환합니다.

이는 allowsInteraction()와 유사하지만, 애플리케이션이 발생한 오류에 대해 사용자에게 알릴 수 있도록 합니다. 세션 관리자는 오류 상호작용 요청에 더 높은 우선순위를 부여할 수 있으며, 이는 오류 상호작용이 허용될 가능성이 더 높다는 것을 의미합니다. 그러나 세션 관리자가 상호작용을 허용할 것이라는 보장은 여전히 없습니다.

allowsInteraction(), release() 및 cancel()도 참조하십시오 .

bool QSessionManager::allowsInteraction()

세션 관리자에게 사용자와 상호작용할 수 있는 권한을 요청합니다. 상호작용이 허용되면 true를 반환하고, 그렇지 않으면 ` false`를 반환합니다.

이 메커니즘의 목적은 시스템 종료 중에 사용자 상호작용을 동기화할 수 있도록 하는 데 있습니다. 고급 세션 관리자는 모든 애플리케이션에 동시에 데이터 저장을 요청할 수 있으며, 그 결과 시스템 종료 속도가 훨씬 빨라집니다.

상호작용이 완료되면 release() 호출을 통해 사용자 상호작용 세마포어를 해제할 것을 강력히 권장합니다. 이렇게 하면, 해당 애플리케이션이 데이터를 저장하느라 바쁜 동안에도 다른 애플리케이션들이 사용자와 상호작용할 기회를 얻을 수 있습니다. (세마포어는 애플리케이션이 종료될 때 암시적으로 해제됩니다.)

사용자가 상호작용 단계 중에 종료 프로세스를 취소하기로 결정한 경우, cancel()를 호출하여 세션 관리자에게 이 사실을 알려야 합니다.

다음은 애플리케이션의 QGuiApplication::commitDataRequest() 함수가 구현될 수 있는 예시입니다:

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("문서에 변경 사항을 저장하시겠습니까?"),
                    QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);

        switch (ret) {
        case QMessageBox::Save:
            manager.release();
            if (!saveDocument())
                manager.cancel();
            break;
        case QMessageBox::Discard:
            break;
        case QMessageBox::취소:
        default:
            manager.cancel();
        }
    } else {
        // 상호작용 권한을 얻지 못했으므로,
        // 대신 적절한 조치를 취합니다
    }
}

데이터를 저장하는 과정에서 애플리케이션 내에서 오류가 발생한 경우, 대신 allowsErrorInteraction()을 사용해 볼 수 있습니다.

QGuiApplication::commitDataRequest(), release(), cancel()도 참조하십시오 .

void QSessionManager::cancel()

세션 관리자에게 종료 프로세스를 취소하도록 지시합니다. 애플리케이션은 사용자에게 먼저 확인하지 않고 이 함수를 호출해서는 안 됩니다.

allowsInteraction() 및 allowsErrorInteraction()도 참조하십시오 .

QStringList QSessionManager::discardCommand() const

현재 설정된 discard 명령을 반환합니다.

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)

discard 명령을 지정된 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()도 참조하십시오 .

© 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.