添加不带发送器和接收器的转换Qt 5.2
Add transition without sender and receiver Qt 5.2
我实现了一个三状态机,并声明了一个更改机器当前状态的函数:void changeState(s1);包含以下命令以更改机器状态:s0->addTransition(s1)当我编译它时,不会出现错误,但当我运行应用程序时,会出现以下消息:
QObject::setParent:无法设置父级,新的父级在不同的线程中
我需要把这个数字连接到一个信号上吗?
非常感谢你的帮助。
Luca
根据您的解释,我认为问题不是来自连接本身。QT不接受父/子位于不同线程中。这意味着您的整个状态机必须在一个线程中运行。
为了在不同于主线程的线程中运行它,您需要在没有父线程的情况下创建QStatemachine,添加所有状态,然后使用QObject::moveToThread将其移动到不同的线程。
你也可以从另一个线程完全创建你的状态机,尽管我从来没有这样做过。在大多数情况下,在main中创建元素是一种更直接的实现。然后你可以随心所欲地移动它们。
是的,你可以添加没有信号的过渡。在这种情况下,只需通过其他方式激活状态,即重新实现QAbstractTransition。
相关文章:
- 将Qt Designer项目转换为C++代码
- Qt 将字符串转换为以 16 为基数的 int,但保留以 16 为基数的值
- Qt-工作线程崩溃时将cv::Mat转换为QImage
- Qt - 将空指针(原始数据)转换为 QImage 并将其显示在标签上
- 在Qt中将QString转换为ASCII值,反之亦然
- 如何在Windows上将Qt QString转换为LPCTSTR
- 将Qt qml文件转换为位图图像
- 将 CRC uint 转换为 QByteArray QT - C++
- QT 创建器只会将第一个单词从文本编辑转换为纯文本
- QT中不允许使用一行多个转换,例如qString到char*
- C++ QList 中项目的 QT 强制转换到子类
- 编译错误 QT - 无法从类型强制转换
- 如何将Qt文件路径从资源转换为绝对路径?
- 将时间戳转换为纳秒 (Qt)
- 将Qt的QML代码转换为C++
- 将QString转换为uintptr_t,qt / c
- 如何在Qt中将带有YUV数据的"QVideoFrame"转换为具有RGBA32数据的"QVideoframe"?
- 没有成员命名 'setRawData' in 'QwtPlotCurve' - 转换 Qt 4.7 为 Qt 5.8
- 没有成员命名 'setResizeMode' in 'QHeaderView' - 转换 Qt 4.7 为 Qt 5.8
- 添加不带发送器和接收器的转换Qt 5.2