首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同步QStateMachine

同步QStateMachine
EN

Stack Overflow用户
提问于 2018-04-13 17:26:55
回答 1查看 80关注 0票数 1

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

代码语言:javascript
复制
void foo()
{
   emit stateChange1();
   ...
   mMember = true;
}

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

EN

回答 1

Stack Overflow用户

发布于 2018-04-14 03:17:11

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

使用code from this answer转换代码,如下所示:

代码语言:javascript
复制
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; });
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49813599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档