我正在尝试创建一个程序,等待用户将某些内容输入到行编辑小部件中,当他们按下回车键时,我想将该值与某个预定义的值(例如“1”)进行比较。我似乎遇到的问题是我找不到使用 QStateMachine 进行这项工作的方法。目前,它会等待用户按下回车键,它只是切换到下一个状态,但我希望它只有在输入为“1”时才进入下一个状态。这是我正在使用的代码,感谢您提供的任何帮助。
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(ui->lineEdit, SIGNAL(editingFinished()), this, SLOT(someSlot()));
setupStateMachine();
}
...
void MainWindow::setupStateMachine()
{
QStateMachine *machine = new QStateMachine(this);
QState *s1 = new QState();
QState *s2 = new QState();
QState *s3 = new QState();
s1->assignProperty(ui->label, "text", readFile("intro.txt"));
s2->assignProperty(ui->label, "text", "In state s2");
s3->assignProperty(ui->label, "text", "In state s3");
s1->addTransition(this, SIGNAL(editing()), s2);
s2->addTransition(this->ui->pushButton, SIGNAL(clicked()), s3);
s3->addTransition(this->ui->pushButton, SIGNAL(clicked()), s1);
machine->addState(s1);
machine->addState(s2);
machine->addState(s3);
machine->setInitialState(s1);
machine->start();
qDebug() << "State Machine Created";
}
...
void MainWindow::someSlot()
{
if(ui->lineEdit->text() == "1")
{
emit editing();
}
}
在头文件中:
{
...
signals:
void editing();
...
private slots:
void someSlot();
...
};
PS:我意识到信号没有做我想要的,但我不知道使用哪个信号。