【问题标题】:Qt state machine assignProperty does not work [duplicate]Qt状态机assignProperty不起作用[重复]
【发布时间】: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;
}

【问题讨论】:

    标签: c++ qt


    【解决方案1】:

    machine 在构造函数中是本地的,它在machine.start(); 之后被删除
    您应该将其声明为 MainWindow 的私​​有成员

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多