QFinalState
为此使用类。在文档示例中显示QPushButton
了退出的用法。例如,您只需要将其与finished()
信号连接即可。
UPD
一些使用示例:
MainWinow.h
class MainWindow : public QMainWindow, private Ui::MainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
private:
QDialog *dialog;
private slots:
void on_pushButton_clicked();
};
主窗口.cpp
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
setupUi(this);
dialog = new QDialog;
}
void MainWindow::on_pushButton_clicked()
{
// Open dialog after push button was clicked
if (!dialog)
dialog = new QDialog;
QEventLoop loop;
QStateMachine machine;
QState *s1 = new QState();
QFinalState *s2 = new QFinalState();
s1->addTransition(dialog, SIGNAL(finished(int)), s2);
connect(&machine, QStateMachine::finished, [&loop]{
qDebug() << "Finished";
loop.quit();
});
machine.addState(s1);
machine.addState(s2);
machine.setInitialState(s1);
machine.start();
dialog->show();
loop.exec();
qDebug() << "Really finished";
}
所以我们创建QEventLoop
并QStateMachine
添加状态(初始状态和最终状态)。然后将QDialog::finished()
信号与转换连接到最终状态,并将QStateMachine::finished()
信号与将停止事件循环的插槽连接。然后显示QDialog
并开始QStateMachine
。
在控制台将打印:
完成的
真的完成了