双向按钮范例

双向按钮范例展示如何使用 状态机框架 以实现简单状态机切换当前状态当点击按钮时。

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, &QAbstractButton::clicked, on);
    on->addTransition(&button, &QAbstractButton::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 状态。

    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.

    button.resize(100, 50);
    button.show();
    return app.exec();
}
					

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

范例工程 @ code.qt.io