【发布时间】:2021-02-13 14:22:08
【问题描述】:
我尝试在 qt-creator 中使用 qt statemachine example-code,但由于某种原因它似乎不起作用。我可以构建和运行代码,但是单击“upButton”时,“标签”的“文本”属性不会改变/出现。有没有人知道如何调试或让它工作?
顺便说一句:我使用的是 qt 4.8,因为这是为了重用旧项目。但我认为这无关紧要。我还尝试了没有 qt-creator 生成的 UI 的 Qt twowaybutton.pro 示例,这很有效。
main.cpp:
#include "mainwindow.h"
#include <QApplication>
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
cout << "hm ..." << endl;
return a.exec();
}
主窗口.cpp:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QStateMachine>
#include <QFinalState>
#include <QPropertyAnimation>
#include <QEventTransition>
#include <QHistoryState>
using namespace std;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->label->setText("initial");
//ui->label->text() = "initial";
QStateMachine machine;
QState *s1 = new QState();
QState *s2 = new QState();
QState *s3 = new QState();
QLabel* object = ui->label;
s1->assignProperty(object, "text", "state s1");
s2->assignProperty(ui->label, "text", "state s2");
s2->assignProperty(ui->label, "text", "state s3");
s1->addTransition(ui->up_Button, SIGNAL(clicked()), s2);
s2->addTransition(ui->up_Button, SIGNAL(clicked()), s3);
s3->addTransition(ui->up_Button, SIGNAL(clicked()), s1);
machine.addState(s1);
machine.addState(s2);
machine.addState(s3);
machine.setInitialState(s1);
machine.start();
}
MainWindow::~MainWindow()
{
delete ui;
}
【问题讨论】: