Описание класса QStateMachine
|
class | SignalEvent |
class | WrappedEvent |
enum | Error { NoError, NoInitialStateError, NoDefaultStateInHistoryStateError, NoCommonAncestorForTransitionError } |
enum | EventPriority { NormalPriority, HighPriority } |
enum | RestorePolicy { DontRestoreProperties, RestoreProperties } |
QStateMachine ( QObject * parent = 0 ) | |
~QStateMachine () | |
void | addDefaultAnimation ( QAbstractAnimation * animation ) |
void | addState ( QAbstractState * state ) |
bool | cancelDelayedEvent ( int id ) |
void | clearError () |
QSet<QAbstractState *> | configuration () const |
QList<QAbstractAnimation *> | defaultAnimations () const |
Error | error () const |
QString | errorString () const |
QStateMachine::RestorePolicy | globalRestorePolicy () const |
bool | isAnimated () const |
bool | isRunning () const |
int | postDelayedEvent ( QEvent * event, int delay ) |
void | postEvent ( QEvent * event, EventPriority priority = NormalPriority ) |
void | removeDefaultAnimation ( QAbstractAnimation * animation ) |
void | removeState ( QAbstractState * state ) |
void | setAnimated ( bool enabled ) |
void | setGlobalRestorePolicy ( QStateMachine::RestorePolicy restorePolicy ) |
virtual bool | eventFilter ( QObject * watched, QEvent * event ) |
void | start () |
void | stop () |
void | started () |
void | stopped () |
virtual bool | event ( QEvent * e ) |
virtual void | onEntry ( QEvent * event ) |
virtual void | onExit ( QEvent * event ) |
Класс QStateMachine предоставляет иерархический конечный автомат.
Класс QStateMachine основан на концепции и записи Диаграммы состояний. QStateMachine - часть Структуры Qt State Machine.
Конечный автомат управляет набором состояний (классов, которые унаследованы от QAbstractState) и переходов (наследников QAbstractTransition) между этими состояниями; эти состояния и переходы определяют граф состояний. Как только граф состояний был построен, автомат может исполнить его. Алгоритм исполнения QStateMachine основан на алгоритме State Chart XML (SCXML). Обзор структуры даёт несколько графов состояний и код, чтобы построить их.
Используйте функцию addState(), чтобы добавить состояние верхнего уровня в автомат. Состояния удаляются из автомата с помощью функции removeState(). Удаление состояния при запущенном автомате - не одобряется.
Прежде, чем автомат будет запущен, должно быть установлено исходное состояние. Исходное состояние - это состояние, в которое входит автомат при запуске. Затем вы можете запустить автомат, вызвав функцию 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, SIGNAL(clicked()), s2); machine.addState(s1); machine.addState(s2); machine.setInitialState(s1); machine.start();
Пример кода использует QState, который унаследован от QAbstractState. Класс QState предоставляет состояние, которое вы можете использовать, чтобы устанавливать свойства и вызывать методы у QObject'ов, когда осуществляется вход в состояние или выход из него. Он также содержит вспомогательные функции для добавления переходов, например, QSignalTransition, как в этом примере. Подробности смотрите в описании класса QState.
Если произошла ошибка, автомат будет искать ошибочное состояние, и, если оно доступно, то он перейдёт в него. Типы возможных ошибок описаны перечислением Error. После перехода в ошибочное состояние, тип ошибки может быть найден с помощью error(). При переходе в ошибочное состояние выполнение графа состояний не будет остановлено. Если ошибочное состояние не применяется, то автомат остановит выполнение и сообщение об ошибке напечатается в консоль.
Смотрите также QAbstractState, QAbstractTransition, QState и Структура Qt State Machine.
Данное перечисление определяет ошибки, которые могут произойти во время работы автомата. Когда конечный автомат встретится с неисправимой ошибкой, во время выполнения, он установит код ошибки, возвращаемый функцией error(), сообщение об ошибке возвращается функцией errorString(), и перейдёт в ошибочное состояние основанное на контексте ошибки.
Константа | Значение | Описание |
---|---|---|
QStateMachine::NoError | 0 | Нет ошибок. |
QStateMachine::NoInitialStateError | 1 | Автомат перешёл в состояние QState имеющего дочерние состояния, но ни одно дочернее не было установлено в качестве исходного. Контекст этой ошибки – состояние, которое является отсутствующим исходным состоянием. |
QStateMachine::NoDefaultStateInHistoryStateError | 2 | Автомат перешёл в состояние QHistoryState, для которого не установлено состояние по умолчанию. Контекст этой ошибки – состояние QHistoryState, которое является отсутствующим состоянием по умолчанию. |
QStateMachine::NoCommonAncestorForTransitionError | 3 | Автомат имеет выбранный переход, чьи исходное и целевое состояния не являются частью одного и того же дерева состояний, и таким образом, не являются частью того же самого автомата. Обычно это может означать, что одному из состояний не был установлен родитель или оно не было добавлено в автомат. Контекст этой ошибки – исходное состояние перехода. |
Смотрите также setErrorState().
Это перечисление определяет приоритет события, посланного автомату, используя метод postEvent().
События с высоким приоритетом обрабатываются перед событиями с нормальным приоритетом.
Константа | Значение | Описание |
---|---|---|
QStateMachine::NormalPriority | 0 | Событие имеет нормальный приоритет. |
QStateMachine::HighPriority | 1 | Событие имеет высокий приоритет. |
Данное перечисление определяет тип политики восстановления. Политика восстановления имеет силу, когда автомат входит в состояние, устанавливающее одно или более свойств. Если политика восстановления установлена в RestoreProperties, автомат сохранит оригинальное значение свойства перед установкой нового значения.
Позднее, когда автомат переходит в состояние, которое не устанавливает значение для заданного свойства, свойство будет автоматически восстановлено в его исходное значение.
Только одно исходное значение будет сохранено для любого заданного свойства. Если значение для свойства уже было сохранено конечным автоматом, оно не будет перезаписано до тех пор, пока свойство не будет успешно восстановлено.
Константа | Значение | Описание |
---|---|---|
QStateMachine::DontRestoreProperties | 0 | Конечный автомат не должен сохранять исходное значение свойств и восстанавливать их позже. |
QStateMachine::RestoreProperties | 1 | Конечный автомат должен сохранять исходное значение свойств и восстанавливать их позже. |
Смотрите также QStateMachine::globalRestorePolicy и QState::assignProperty().
Данное свойство указывает, разрешены ли анимации.
По умолчанию это свойство равно true.
Функции доступа:
bool | isAnimated () const |
void | setAnimated ( bool enabled ) |
Смотрите также QAbstractTransition::addAnimation().
Это свойство содержит строку сообщения об ошибке этого автомата.
Функции доступа:
QString | errorString () const |
Это свойство содержит политику восстановления для состояний этого автомата.
По умолчанию это свойство равно QStateMachine::DontRestoreProperties.
Функции доступа:
QStateMachine::RestorePolicy | globalRestorePolicy () const |
void | setGlobalRestorePolicy ( QStateMachine::RestorePolicy restorePolicy ) |
Конструирует новый автомат с заданным родителем - parent.
Уничтожает этот автомат.
Добавляет анимацию (animation) по умолчанию, которая будет приниматься для любых переходов.
Добавляет заданное состояние - state, в этот автомат. Состояние становится состоянием верхнего уровня.
Если состояние уже используется в другом автомате, сначала оно будет удалено из его старого автомата, и затем, добавлено в этот автомат.
Смотрите также removeState() и setInitialState().
Отменяет обработку события с заданным идентификатором(id). Идентификатор должен иметь значение, возвращаемое функцией postDelayedEvent(). Возвращает true, если событие было успешно отменено, в противном случае возвращает false.
Замечание: Эта функция потокобезопасна.
Смотрите также postDelayedEvent().
Очищает сообщения и коды ошибок автомата.
Возвращает максимальное непротиворечивое множество состояний (включая параллельные и конечное состояния), в котором этот конечный автомат находится в настоящий момент. Если состояние s входит в конфигурацию, то и родитель s, тоже входит в эту конфигурацию. Заметьте, однако, что автомат сам по себе не является явным членом конфигурации.
Возвращает список анимаций по умолчанию, которые принимаются для любого перехода.
Возвращает код последней ошибки, которая произошла в автомате.
Переопределено от QObject::event().
Переопределено из QObject::eventFilter().
Возвращает, запущен ли автомат или нет.
Смотрите также start(), stop()
Переопределено из QAbstractState::onEntry().
Переопределено из QAbstractState::onExit().
Посылает заданное событие – event, для обработки этим автоматом, с задержкой – delay, в миллисекундах. Возвращает идентификатор, связанный с задержанным событием, или -1, если событие не может быть послано.
Эта функция возвращает управление немедленно. Когда время задержки истечёт, событие будет добавлено в очередь событий автомата для обработки. Автомат становится владельцем события и удаляет его, как только оно будет обработано.
Вы можете посылать события только, когда автомат запущен.
Замечание: Эта функция потокобезопасна.
Смотрите также cancelDelayedEvent() и postEvent().
Посылает заданное событие – event, с заданным приоритетом priority, для обработки этим автоматом.
Эта функция возвращает управление немедленно. Событие добавляется в очередь событий автомата. События обрабатываются в порядке поступления. Автомат становится владельцем события и удаляет его, как только оно будет обработано.
Вы можете посылать события только, когда автомат запущен.
Замечание: Эта функция потокобезопасна.
Смотрите также postDelayedEvent().
Удаляет анимацию – animation, из списка анимаций по умолчанию.
Удаляет заданное состояние – state, из конечного автомата. Автомат перестаёт быть владельцем состояния.
Смотрите также addState().
Запускает этот автомат. Автомат сбросит свои конфигурацию и переход в начальное состояние. При входе в конечное состояние верхнего уровня (QFinalState), автомат пошлет сигнал finished()
Замечание: Конечный автомат не будет работать без запуска цикла событий, такого, как главный цикл событий приложения, запускаемый с помощью QCoreApplication::exec() или QApplication::exec().
Смотрите также started(), finished(), stop() и initialState().
Этот сигнал посылается, когда автомат входит в его начальное состояние (QStateMachine::initialState).
Смотрите также QStateMachine::finished() и QStateMachine::start().
Останавливает этот автомат. Автомат остановит обработку событий и, затем, пошлёт сигнал stopped().
Смотрите также stopped() и start().
Этот сигнал посылается, когда автомат останавливается.
Смотрите также QStateMachine::stop() и QStateMachine::finished().
Авторские права © 2010 Nokia Corporation и/или её дочерние компании | Торговые марки | Qt 4.6.4 |
Попытка перевода Qt документации. Если есть желание присоединиться, или если есть замечания или пожелания, то заходите на форум: Перевод Qt документации на русский язык... Люди внесшие вклад в перевод: Команда переводчиков |