gpt4 book ai didi

c++ - 如何从 QLineEdit 小部件获取文本并在状态机中使用它?

转载 作者:太空宇宙 更新时间:2023-11-04 12:00:19 25 4
gpt4 key购买 nike

我正在尝试创建一个程序,等待用户将某些内容输入行编辑小部件,当他们按下回车键时,我想将该值与某个预定义值(例如“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:我意识到信号不符合我的要求,但我不知道该使用哪个信号。

最佳答案

也许您可以将editingFinished 连接到您自己的插槽。在那个插槽中,检查输入是否为“1”。如果是这样,发出一个新的信号,你传递给 addTransition 而不是 editingFinished

要向类添加信号,请像这样更改类(确保在类的最顶部声明​​了一个 Q_OBJECT):

signals:
void mySignalName();

信号保证受到保护。您不编写函数的主体。这就是 MOC 所做的。所以,当你想在你的类中调用信号时,只需调用:

emit mySignalName();

emit 仅用于代码文档。它的#defined 为空。 MOC 将生成 mySignalName 的主体,并归结为调用您使用 QObject::connect 将其连接到的插槽。

要向您的类(class)添加新插槽,请添加:

private slots:
void mySlotName();

请注意,您必须编写槽的主体。

void MainWindow::mySlotName()
{
if(myLineEdit->text() == "1")
emit mySignalName();
}

关于c++ - 如何从 QLineEdit 小部件获取文本并在状态机中使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14389754/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com