我实现了一个三态机并声明了一个改变机器当前状态的函数: void changeState(s1); 包含以下命令以更改机器状态: S0-> addTransition(S1) 编译时没有出现错误,但是当我运行应用程序时,会出现以下消息:
QObject :: setParent:无法设置父级,新父级位于不同的线程
我是否必须将信号连接到信号上?
非常感谢你的帮助。
卢卡
答案 0 :(得分:0)
根据您的解释,我会告诉问题不是来自连接本身。 QT不接受父/子位于不同的帖子中。这意味着您的整个状态机必须在一个单独的线程中运行。
为了在不需要父节点的情况下创建QStatemachine的主线程不同的线程中运行它,添加所有状态,然后使用QObject :: moveToThread将其移动到不同的线程。
你也可以从另一个线程完全创建你的状态机,但我从来没有这样做过。在main中创建元素大多数时候是更直接的实现。然后,您可以根据需要移动它们。
是的,您可以在没有信号的情况下添加转换。在这种情况下,只需通过其他方式激活状态,重新实现QAbstractTransition。