添加不带发送器和接收器的转换Qt 5.2

Add transition without sender and receiver Qt 5.2

本文关键字:转换 Qt 接收器 添加      更新时间:2023-10-16

我实现了一个三状态机,并声明了一个更改机器当前状态的函数:void changeState(s1);包含以下命令以更改机器状态:s0->addTransition(s1)当我编译它时,不会出现错误,但当我运行应用程序时,会出现以下消息:

QObject::setParent:无法设置父级,新的父级在不同的线程中

我需要把这个数字连接到一个信号上吗?

非常感谢你的帮助。

Luca

根据您的解释,我认为问题不是来自连接本身。QT不接受父/子位于不同线程中。这意味着您的整个状态机必须在一个线程中运行。

为了在不同于主线程的线程中运行它,您需要在没有父线程的情况下创建QStatemachine,添加所有状态,然后使用QObject::moveToThread将其移动到不同的线程。

你也可以从另一个线程完全创建你的状态机,尽管我从来没有这样做过。在大多数情况下,在main中创建元素是一种更直接的实现。然后你可以随心所欲地移动它们。

是的,你可以添加没有信号的过渡。在这种情况下,只需通过其他方式激活状态,即重新实现QAbstractTransition。