我有一个类,其内部状态决定了QML文件中的布局。现在这个内部状态主要由状态机决定。但是,它的一部分不是由状态机决定的,而是依赖于其他成员变量来设置。我有以下情况:
$(".dynamically").bind( "click", function(event) {
alert("The div " + event.target.innerText+ " was clicked.");
});
<div class="dynamically">div 1</div>
<div class="dynamically">div 2</div>
此处void foo()
{
emit stateChange1();
...
mMember = true;
}
可能会更改状态机的状态,从而导致qml更改)。 mMember直接更改qml。
现在我的问题是,在设置stateChange1()
隐含的状态更改之前,处理statechange1()
隐含的(可能的)状态更改至关重要。但是由于QStateMachine异步工作,我无法保证这一点。这个问题有没有优雅的解决方案?
答案 0 :(得分: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; });
}