Qt Reference Documentation

# Two-way Button Example

Files:

- statemachine/twowaybutton/main.cpp
- statemachine/twowaybutton/twowaybutton.pro

The Two-way button example shows how to use The State Machine Framework to implement a simple state machine that toggles the current state when a button is clicked.

     int main(int argc, char **argv)
     {
         QApplication app(argc, argv);
         QPushButton button;
         QStateMachine machine;

The application's main() function begins by constructing the application object, a button and a state machine.

         QState *off = new QState();
         off->assignProperty(&button, "text", "Off");
         off->setObjectName("off");

         QState *on = new QState();
         on->setObjectName("on");
         on->assignProperty(&button, "text", "On");

The state machine has two states; `on` and `off`. When either state is entered, the text of the button will be set accordingly.

         off->addTransition(&button, SIGNAL(clicked()), on);
         on->addTransition(&button, SIGNAL(clicked()), off);

When the state machine is in the `off` state and the button is clicked, it will transition to the `on` state; when the state machine is in the `on` state and the button is clicked, it will transition to the `off` state.

         machine.addState(off);
         machine.addState(on);

The states are added to the state machine; they become top-level (sibling) states.

         machine.setInitialState(off);
         machine.start();

The initial state is `off`; this is the state the state machine will immediately transition to once the state machine is started.

     #if defined(Q_OS_SYMBIAN)
         button.showMaximized();
     #elif defined(Q_WS_MAEMO_5) || defined(Q_WS_SIMULATOR)
         button.show();
     #else
         button.resize(100, 50);
         button.show();
     #endif
         return app.exec();
     }

Finally, the button is resized and made visible, and the application event loop is entered.