1

我有一个类,其内部状态决定了 QML 文件中的布局。现在这个内部状态主要是由状态机决定的。然而,它的一部分不是由状态机决定的,而是依赖于其他要设置的成员变量。我有以下情况:

void foo()
{
   emit stateChange1();
   ...
   mMember = true;
}

这里stateChange1()可能会改变状态机的状态,导致 qml 变化)。mMember 直接更改 qml。现在我的问题是,statechange1() 在设置隐含的状态更改之前处理隐含的(可能的)状态更改至关重要mMember。但是,由于 QStateMachine 异步工作,我不能保证这一点。这个问题有什么优雅的解决方案吗?

4

1 回答 1

1

最有可能的是,您需要将操作提交到线程的事件队列或状态机的事件队列——因此它将在其他操作完成后执行。

使用此答案中的代码,将代码转换如下:

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; });
}
于 2018-04-13T19:17:11.217 回答