同步 QStateMachine
Posted
技术标签:
【中文标题】同步 QStateMachine【英文标题】:Synchronise QStateMachine 【发布时间】:2018-04-13 09:26:54 【问题描述】:我有一个类,其内部状态决定了 QML 文件中的布局。现在这个内部状态主要是由状态机决定的。然而,它的一部分不是由状态机决定的,而是依赖于其他要设置的成员变量。我有以下情况:
void foo()
emit stateChange1();
...
mMember = true;
这里stateChange1()
可能会改变状态机的状态,导致qml改变)。 mMember 直接更改 qml。
现在我的问题是,在设置mMember
隐含的状态更改之前处理statechange1()
隐含的(可能的)状态更改至关重要。然而,由于 QStateMachine 异步工作,我不能保证这一点。这个问题有什么优雅的解决方案吗?
【问题讨论】:
【参考方案1】:很可能,您需要将操作提交到线程的事件队列或状态机的事件队列 - 因此它将在其他操作完成后执行。
使用code from this answer,转换代码如下:
template <typename F>
static void postToStateMachine(F && fun, QStateMachine * sm)
sm->postEvent(new detail::FEvent<F>(std::forward<F>(fun)));
void Class::foo()
emit stateChange1();
...
postToObject([this] mMember = true; , this);
// or
postToStateMachine([this] mMember = true; );
【讨论】:
以上是关于同步 QStateMachine的主要内容,如果未能解决你的问题,请参考以下文章