学习Qt状态机框架时遇到的一个bug
来源:互联网 发布:东方永夜抄 mac 编辑:程序博客网 时间:2024/05/19 22:03
Qt的状态机框架官方文档(http://doc.qt.io/qt-5/statemachine-api.html)的第一个例子如下:
QStateMachine machine;QState *s1 = new QState();QState *s2 = new QState();QState *s3 = new QState();s1->assignProperty(ui->button, "text", "In state s1");s2->assignProperty(ui->button, "text", "In state s2");s3->assignProperty(ui->button, "text", "In state s3");s1->addTransition(button, SIGNAL(clicked()), s2);s2->addTransition(button, SIGNAL(clicked()), s3);s3->addTransition(button, SIGNAL(clicked()), s1);machine.addState(s1);machine.addState(s2);machine.addState(s3);machine.setInitialState(s1);
我把它放到一个QMainWindow的构造函数中,发现button的text并没有按照预期发生变化。利用connect函数可以发现,点击button时,并没有发出QState::entered()信号。
后来我发现问题出在了QStateMachine machine;上,machine是一个局部变量,当构造函数执行完毕后就不存在了,自然无法完成状态的转换。解决的方法也很简单,使用一个QStateMachine *来代替就可以了。
我怀疑这段代码完全没有适用场合,因为除非程序一直在运行这段代码,否则machine变量一定会消失而无法访问。但是如果程序一直在运行这段代码,它还如何响应程序的event loop呢,如果无法响应event loop,也就无法进行状态转换。
转载请注明来源:http://blog.csdn.net/imred
阅读全文
0 0
- 学习Qt状态机框架时遇到的一个bug
- Qt状态机框架的一个典型应用
- Qt 状态机框架学习
- Qt 状态机框架学习
- [Q学习]13 Qt状态机框架——简单的状态机
- [Q学习]15 Qt状态机框架——状态机停止
- 遇到的一个bug
- QT状态机框架
- qt状态机框架
- Qt状态机框架
- QT状态机框架
- Qt Qml状态机框架
- Qt状态机框架
- qt 的一个bug
- Qt的一个bug
- python orm框架sqlalchemy执行更新、删除时遇到的一个bug
- python orm框架sqlalchemy执行更新、删除时遇到的一个bug
- Qt状态机学习1
- Android 读取手机通讯录内容
- IOS 视屏开发之AVPlayer的基本使用
- 软件架构选择与架构选择
- 【论文笔记】物体检测与分割系列 DeepMask
- 关于java中子父类赋值的问题
- 学习Qt状态机框架时遇到的一个bug
- spring boot配置dubbo(properties)
- openwhish app readme
- 有时候开发listView需要默认显示到最后一条数据
- USB3.0
- 算法的时间复杂度
- sed命令详解
- BP神经网络公式推导
- BZOJ4381: [POI2015]Odwiedziny 分块 长链剖分