【问题标题】:Synchronise QStateMachine同步 QStateMachine
【发布时间】:2018-04-13 09:26:54
【问题描述】:

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

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

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

【问题讨论】:

    标签: qt 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; });
    }
    

    【讨论】:

      猜你喜欢
      • 2016-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多