ユーザーが行編集ウィジェットに何かを入力するのを待つプログラムを作成しようとしています。ユーザーがEnterキーを押したときに、値を事前定義された値(たとえば、「1」)と比較したいと思います。私が抱えていると思われる問題は、QStateMachineでこれを機能させる方法が見つからないことです。現時点では、ユーザーがEnterキーを押すのを待って、次の状態に切り替わるだけですが、入力が「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:信号が私が望むことをしていないことはわかっていますが、どの信号を使用するかがわかりません。