QStateMachine Class
QStateMachine 클래스는 계층적 유한 상태 기계를 제공합니다. 더 보기...
| 헤더: | #include <QStateMachine> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS StateMachine) target_link_libraries(mytarget PRIVATE Qt6::StateMachine) |
| qmake: | QT += statemachine |
| 상속: | QState |
참고: 이 클래스의 모든 함수는 재진입 가능합니다.
참고: 다음 함수들은 스레드 안전합니다:
- postEvent(QEvent *event, QStateMachine::EventPriority priority)
- postDelayedEvent(QEvent *event, int delay)
- cancelDelayedEvent(int id)
- postDelayedEvent(QEvent *event, std::chrono::milliseconds delay)
공개 타입
| class | SignalEvent |
| class | WrappedEvent |
| enum | Error { NoError, NoInitialStateError, NoDefaultStateInHistoryStateError, NoCommonAncestorForTransitionError, StateMachineChildModeSetToParallelError } |
| enum | EventPriority { NormalPriority, HighPriority } |
속성
- animated : bool
- errorString : QString
- globalRestorePolicy : QState::RestorePolicy
- running : bool
공개 함수
| QStateMachine(QObject *parent = nullptr) | |
| virtual | ~QStateMachine() |
| void | addDefaultAnimation(QAbstractAnimation *animation) |
| void | addState(QAbstractState *state) |
| QBindable<bool> | bindableAnimated() |
| QBindable<QString> | bindableErrorString() const |
| QBindable<QState::RestorePolicy> | bindableGlobalRestorePolicy() |
| bool | cancelDelayedEvent(int id) |
| void | clearError() |
| QSet<QAbstractState *> | configuration() const |
| QList<QAbstractAnimation *> | defaultAnimations() const |
| QStateMachine::Error | error() const |
| QString | errorString() const |
| QState::RestorePolicy | globalRestorePolicy() const |
| bool | isAnimated() const |
| bool | isRunning() const |
| int | postDelayedEvent(QEvent *event, int delay) |
| int | postDelayedEvent(QEvent *event, std::chrono::milliseconds delay) |
| void | postEvent(QEvent *event, QStateMachine::EventPriority priority = NormalPriority) |
| void | removeDefaultAnimation(QAbstractAnimation *animation) |
| void | removeState(QAbstractState *state) |
| void | setAnimated(bool enabled) |
| void | setGlobalRestorePolicy(QState::RestorePolicy restorePolicy) |
재구현된 공용 함수
| virtual bool | eventFilter(QObject *watched, QEvent *event) override |
공개 슬롯
| void | setRunning(bool running) |
| void | start() |
| void | stop() |
신호
| void | runningChanged(bool running) |
| void | started() |
| void | stopped() |
재구현된 보호 함수
| virtual bool | event(QEvent *e) override |
| virtual void | onEntry(QEvent *event) override |
| virtual void | onExit(QEvent *event) override |
상세 설명
QStateMachine은 스테이트차트(Statecharts)의 개념과 표기법을 기반으로 합니다. QStateMachine은 Qt State Machine 프레임워크의 일부입니다.
상태 머신은 일련의 상태( QAbstractState 을 상속하는 클래스)와 이러한 상태 간의 전환( QAbstractTransition 의 하위 클래스)을 관리하며, 이러한 상태와 전환이 상태 그래프를 정의합니다. 상태 그래프가 구축되면 상태 머신은 이를 실행할 수 있습니다. QStateMachine의 실행 알고리즘은 상태 차트 XML(SCXML) 알고리즘을 기반으로 합니다. 이 프레임워크의 개요에는 여러 상태 그래프와 이를 구축하는 코드가 제시되어 있습니다.
addState() 함수를 사용하여 상태 기계에 최상위 상태를 추가할 수 있습니다. 상태는 removeState() 함수를 사용하여 제거합니다. 상태 기계가 실행 중인 상태에서 상태를 제거하는 것은 권장되지 않습니다.
상태 머신을 시작하기 전에 ` initial state ()`를 설정해야 합니다. 초기 상태는 상태 머신이 시작될 때 진입하는 상태입니다. 그런 다음 ` start()`를 호출하여 상태 머신을 시작할 수 있습니다. 초기 상태에 진입하면 ` started()` 신호가 발생합니다.
이 머신은 이벤트 기반이며 자체 이벤트 루프를 유지합니다. 이벤트는 ` postEvent()`를 통해 머신에 게시됩니다. 이는 머신이 비동기적으로 실행되며, 실행 중인 이벤트 루프가 없으면 진행되지 않는다는 점을 유의하십시오. 일반적으로 Qt의 전환(예: ` QEventTransition ` 및 그 하위 클래스)이 이를 처리하므로, 머신에 직접 이벤트를 게시할 필요는 없습니다. 하지만 이벤트에 의해 트리거되는 사용자 정의 전환의 경우, ` postEvent()`이 유용합니다.
상태 머신은 최상위 최종 상태에 도달할 때까지 이벤트를 처리하고 전환을 수행하며, 최상위 최종 상태에 도달하면 finished() 신호를 방출합니다. 또한 상태 머신을 명시적으로 stop()로 종료할 수도 있습니다. 이 경우 stopped() 신호가 방출됩니다.
다음 코드 조각은 버튼이 클릭되면 종료되는 상태 머신을 보여줍니다:
QPushButton button;
QStateMachine machine;
QState *s1 = new QState();
s1->assignProperty(&button, "text", "Click me");
QFinalState *s2 = new QFinalState();
s1->addTransition(&button, &QPushButton::clicked, s2);
machine.addState(s1);
machine.addState(s2);
machine.setInitialState(s1);
machine.start();이 코드 예제는 ` QAbstractState`을 상속받은 ` QState`을 사용합니다. ` QState ` 클래스는 상태에 진입하거나 종료할 때 ` QObject`의 속성을 설정하고 메서드를 호출하는 데 사용할 수 있는 상태를 제공합니다. 또한 이 예제와 같이 ` QSignalTransition`과 같은 전환을 추가하는 데 편리한 함수들도 포함되어 있습니다. 자세한 내용은 ` QState ` 클래스 설명을 참조하십시오.
오류가 발생하면 시스템은 error state 를 검색하고, 해당 상태가 존재할 경우 이 상태로 진입합니다. 발생할 수 있는 오류 유형은 Error 열거형으로 정의되어 있습니다. 오류 상태로 진입한 후, error()를 통해 오류 유형을 확인할 수 있습니다. 오류 상태로 진입하더라도 상태 그래프의 실행은 중단되지 않습니다. 오류 상태에 해당하는 오류 상태가 없는 경우, 머신의 실행이 중단되고 콘솔에 오류 메시지가 출력됩니다.
참고: 중요 : 상태 머신의 ChildMode 속성을 parallel(ParallelStates)로 설정하면 상태 머신이 유효하지 않게 됩니다. 이 속성은 반드시 ExclusiveStates 로 설정하거나 유지해야 합니다.
관련 항목: QAbstractState, QAbstractTransition, QState 및 Qt State Machine 개요.
멤버 유형 문서
enum QStateMachine::Error
이 열거형 타입은 실행 시 상태 머신에서 발생할 수 있는 오류를 정의합니다. 상태 머신이 실행 중에 복구 불가능한 오류를 감지하면, ` error()`에서 반환되는 오류 코드와 ` errorString()`에서 반환되는 오류 메시지를 설정하고, 오류의 컨텍스트에 따라 오류 상태로 진입합니다.
| 상수 | 값 | 설명 |
|---|---|---|
QStateMachine::NoError | 0 | 오류가 발생하지 않았습니다. |
QStateMachine::NoInitialStateError | 1 | 머신이 초기 상태가 설정되지 않은 자식 상태를 가진 QState 에 진입했습니다. 이 오류의 컨텍스트는 초기 상태가 누락된 상태입니다. |
QStateMachine::NoDefaultStateInHistoryStateError | 2 | 머신이 기본 상태가 설정되지 않은 상태 트리( QHistoryState )로 진입했습니다. 이 오류의 컨텍스트는 기본 상태가 누락된 상태 트리( QHistoryState )입니다. |
QStateMachine::NoCommonAncestorForTransitionError | 3 | 머신이 출발 상태와 도착 상태가 동일한 상태 트리에 속하지 않아 동일한 상태 머신에 속하지 않는 전이를 선택했습니다. 일반적으로 이는 상태 중 하나에 부모가 지정되지 않았거나 어떤 머신에도 추가되지 않았음을 의미할 수 있습니다. 이 오류의 컨텍스트는 전이의 출발 상태입니다. |
QStateMachine::StateMachineChildModeSetToParallelError | 4 | 상태 머신의 ` childMode ` 속성이 ` QState::ParallelStates`로 설정되었습니다. 이는 유효하지 않습니다. 상태 머신 자체가 아닌, 상태만 병렬로 선언될 수 있습니다. 이 열거형 값은 Qt 5.14에서 추가되었습니다. |
setErrorState()도 참조하십시오 .
enum QStateMachine::EventPriority
이 열거형(enum) 유형은 ` postEvent()`를 사용하여 상태 머신에 게시된 이벤트의 우선순위를 지정합니다.
우선순위가 높은 이벤트는 일반 우선순위의 이벤트보다 먼저 처리됩니다.
| 상수 | 상수 | 설명 |
|---|---|---|
QStateMachine::NormalPriority | 0 | 이 이벤트는 일반 우선순위를 가집니다. |
QStateMachine::HighPriority | 1 | 이 이벤트의 우선순위는 높음입니다. |
속성 설명
[bindable] animated : bool
참고: 이 속성은 ‘ QProperty ’ 바인딩을 지원합니다.
이 속성은 애니메이션이 활성화되어 있는지 여부를 나타냅니다.
이 속성의 기본값은 ` true`입니다.
QAbstractTransition::addAnimation()도 참조하십시오.
액세스 함수:
| bool | isAnimated() const |
| void | setAnimated(bool enabled) |
[bindable read-only] errorString : QString
참고: 이 속성은 QProperty 바인딩을 지원합니다.
이 속성은 이 상태 머신의 오류 문자열을 저장합니다.
액세스 함수:
| QString | errorString() const |
[bindable] globalRestorePolicy : QState::RestorePolicy
참고: 이 속성은 QProperty 바인딩을 지원합니다.
이 속성은 이 상태 머신의 상태에 대한 복원 정책을 포함합니다.
이 속성의 기본값은 QState::DontRestoreProperties 입니다.
액세스 함수:
| QState::RestorePolicy | globalRestorePolicy() const |
| void | setGlobalRestorePolicy(QState::RestorePolicy restorePolicy) |
running : bool
이 속성은 이 상태 머신의 실행 상태를 저장합니다.
액세스 함수:
| bool | isRunning() const |
| void | setRunning(bool running) |
알림 신호:
| void | runningChanged(bool running) |
start(), stop(), started(), stopped(), runningChanged()도 참조하십시오 .
멤버 함수 설명서
[explicit] QStateMachine::QStateMachine(QObject *parent = nullptr)
주어진 parent 을 사용하여 새로운 상태 머신을 생성합니다.
[virtual noexcept] QStateMachine::~QStateMachine()
이 상태 머신을 파괴합니다.
void QStateMachine::addDefaultAnimation(QAbstractAnimation *animation)
모든 전환 시 고려될 기본 animation 을 추가합니다.
void QStateMachine::addState(QAbstractState *state)
지정된 state 를 이 상태 머신에 추가합니다. 해당 상태는 최상위 상태가 되며, 상태 머신이 해당 상태에 대한 소유권을 갖게 됩니다.
해당 상태가 이미 다른 머신에 속해 있는 경우, 먼저 기존 머신에서 제거된 후 이 머신에 추가됩니다.
removeState() 및 setInitialState()도 참조하십시오 .
bool QStateMachine::cancelDelayedEvent(int id)
주어진 ` id`로 식별되는 지연 이벤트를 취소합니다. `id`는 ` postDelayedEvent()` 호출에서 반환된 값이어야 합니다. 이벤트가 성공적으로 취소되면 ` true `를 반환하고, 그렇지 않으면 ` false`를 반환합니다.
참고: 이 함수는 스레드 안전합니다.
postDelayedEvent()도 참조하십시오 .
void QStateMachine::clearError()
상태 머신의 오류 문자열과 오류 코드를 지웁니다.
QSet<QAbstractState *> QStateMachine::configuration() const
이 상태 기계가 현재 속해 있는 상태(병렬 상태 및 최종 상태 포함)의 최대 일관 집합을 반환합니다. 상태 s 가 구성(configuration)에 포함되어 있다면, s 의 부모 상태도 항상 c에 포함됩니다. 단, 상태 기계 자체는 구성의 명시적인 구성원이 아니라는 점에 유의하십시오.
QList<QAbstractAnimation *> QStateMachine::defaultAnimations() const
모든 전환에 적용될 수 있는 기본 애니메이션 목록을 반환합니다.
QStateMachine::Error QStateMachine::error() const
상태 머신에서 발생한 가장 최근 오류의 오류 코드를 반환합니다.
QString QStateMachine::errorString() const
상태 기계에서 발생한 가장 최근 오류의 오류 문자열을 반환합니다.
참고: errorString 속성의게터 함수입니다.
[override virtual protected] bool QStateMachine::event(QEvent *e)
QState::event(QEvent *e)를 재구현합니다.
[override virtual] bool QStateMachine::eventFilter(QObject *watched, QEvent *event)
QObject::eventFilter(QObject *watched, QEvent *event)를 재구현합니다.
QState::RestorePolicy QStateMachine::globalRestorePolicy() const
상태 머신의 복원 정책을 반환합니다.
참고: globalRestorePolicy 속성에 대한게터 함수입니다.
setGlobalRestorePolicy()도 참조하십시오 .
bool QStateMachine::isAnimated() const
이 상태 머신에서 애니메이션이 활성화되어 있는지 여부를 반환합니다.
참고: animated 속성에 대한게터 함수입니다.
[override virtual protected] void QStateMachine::onEntry(QEvent *event)
QState::onEntry(QEvent *event)를 재구현합니다.
이 함수는 start()을 호출하여 상태 머신을 시작합니다.
[override virtual protected] void QStateMachine::onExit(QEvent *event)
QState::onExit(QEvent *event)를 재구현합니다.
이 함수는 stop()를 호출하여 상태 머신을 중지한 후, stopped() 신호를 발생시킵니다.
int QStateMachine::postDelayedEvent(QEvent *event, int delay)
지정된 event 를 이 상태 머신에서 처리하도록 게시하며, 지정된 delay (밀리초 단위)만큼 지연시킵니다. 지연된 이벤트와 연관된 식별자를 반환하며, 이벤트를 게시할 수 없는 경우 -1을 반환합니다.
이 함수는 즉시 반환됩니다. 지연 시간이 만료되면 이벤트는 처리를 위해 상태 머신의 이벤트 큐에 추가됩니다. 상태 머신은 이벤트에 대한 소유권을 가져가며, 처리가 완료되면 해당 이벤트를 삭제합니다.
상태 머신이 실행 중일 때만 이벤트를 게시할 수 있습니다.
참고: 이 함수는 스레드 안전합니다.
cancelDelayedEvent() 및 postEvent()도 참조하십시오 .
int QStateMachine::postDelayedEvent(QEvent *event, std::chrono::milliseconds delay)
지정된 event 를 이 상태 머신에서 처리하도록 게시하며, 지정된 delay (밀리초 단위)만큼 지연시킵니다. 지연된 이벤트와 연관된 식별자를 반환하며, 이벤트를 게시할 수 없는 경우에는 -1을 반환합니다.
이 함수는 즉시 반환됩니다. 지연 시간이 만료되면 이벤트는 처리를 위해 상태 머신의 이벤트 큐에 추가됩니다. 상태 머신은 이벤트에 대한 소유권을 가져가며, 처리가 완료되면 해당 이벤트를 삭제합니다.
상태 머신이 실행 중일 때만 이벤트를 게시할 수 있습니다.
이 함수는 오버로드된 함수입니다.
참고: 이 함수는 스레드 안전합니다.
cancelDelayedEvent() 및 postEvent()도 참조하십시오 .
void QStateMachine::postEvent(QEvent *event, QStateMachine::EventPriority priority = NormalPriority)
지정된 priority 의 지정된 event 를 이 상태 머신에서 처리할 수 있도록 게시합니다.
이 함수는 즉시 반환됩니다. 이벤트는 상태 머신의 이벤트 큐에 추가됩니다. 이벤트는 게시된 순서대로 처리됩니다. 상태 머신은 이벤트의 소유권을 인수하며, 처리가 완료되면 해당 이벤트를 삭제합니다.
이벤트는 상태 머신이 실행 중이거나 시작 중인 경우에만 게시할 수 있습니다.
참고: 이 함수는 스레드 안전합니다.
postDelayedEvent()도 참조하십시오 .
void QStateMachine::removeDefaultAnimation(QAbstractAnimation *animation)
기본 애니메이션 목록에서 ‘ animation ’을 제거합니다.
void QStateMachine::removeState(QAbstractState *state)
지정된 state 를 이 상태 머신에서 제거합니다. 상태 머신은 해당 상태에 대한 소유권을 해제합니다.
addState()도 참조하십시오 .
[signal] void QStateMachine::runningChanged(bool running)
이 신호는 ` running `를 인수로 사용하여 실행 중인 속성이 변경될 때 발생합니다.
참고: running 속성에 대한알림 신호입니다.
QStateMachine::running도 참조하십시오 .
void QStateMachine::setAnimated(bool enabled)
이 상태 머신에서 애니메이션이 ‘ enabled ’인지 여부를 설정합니다.
참고: animated 속성에 대한세터 함수입니다.
isAnimated()도 참조하십시오 .
void QStateMachine::setGlobalRestorePolicy(QState::RestorePolicy restorePolicy)
상태 머신의 복원 정책을 ‘ restorePolicy ’로 설정합니다. 기본 복원 정책은 ‘ QState::DontRestoreProperties ’입니다.
참고: globalRestorePolicy 속성에 대한세터 함수입니다.
참조: globalRestorePolicy()
[slot] void QStateMachine::start()
이 상태 머신을 시작합니다. 상태 머신은 구성을 초기화하고 초기 상태로 전환합니다. 최상위 최종 상태(QFinalState)에 진입하면, 상태 머신은 finished() 신호를 발생시킵니다.
참고: QCoreApplication::exec() 또는 QApplication::exec()로 시작된 메인 애플리케이션 이벤트 루프와 같은 실행 중인 이벤트 루프가 없으면 상태머신은 실행되지 않습니다.
관련 항목: started(), finished(), stop(), initialState() 및 setRunning().
[private signal] void QStateMachine::started()
이 신호는 상태 머신이 초기 상태(QStateMachine::initialState)에 진입했을 때 발신됩니다.
참고: 이 신호는 비공개 신호입니다. 신호 연결에서는 사용할 수 있지만, 사용자가 직접 발산할 수는 없습니다.
QStateMachine::finished() 및 QStateMachine::start()도 참조하십시오 .
[slot] void QStateMachine::stop()
이 상태 머신을 중지합니다. 상태 머신은 이벤트 처리를 중지한 후 stopped() 신호를 발신합니다.
stopped(), start(), setRunning()도 참조하십시오 .
[private signal] void QStateMachine::stopped()
이 신호는 상태 머신이 정지했을 때 전송됩니다.
참고: 이 신호는 비공개 신호입니다. 신호 연결에서 사용할 수는 있지만, 사용자가 직접 발생시킬 수는 없습니다.
QStateMachine::stop() 및 QStateMachine::finished()도 참조하십시오 .
© 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.