我有一个类,它的内部状态决定了QML文件中的布局。现在,这种内部状态主要由状态机确定。然而,它的一部分并不是由状态机确定的,而是依赖于要设置的其他成员变量。我有以下情况:
void foo()
{
emit stateChange1();
...
mMember = true;
}在这里,stateChange1()可能会更改状态机的状态,从而导致qml更改)。mMember直接更改qml。现在我的问题是,在设置mMember所隐含的状态更改之前,处理statechange1()所隐含的(可能的)状态更改是至关重要的。但是,由于QStateMachine是异步工作的,我不能保证这一点。对于这个问题,有什么很好的解决方案吗?
发布于 2018-04-14 03:17:11
最有可能的是,您需要将操作提交到线程的事件队列或状态机的事件队列-因此,它将在其他操作完成后执行。
使用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; });
}https://stackoverflow.com/questions/49813599
复制相似问题