问题标签 [qstatemachine]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
571 浏览

qt - QStateMachine addTransition 用于带有参数的信号

使用参数(c++/c++11)在信号上放置 addTransition 的最佳和简短方法是什么:

0 投票
1 回答
373 浏览

c++ - QStateMachine延迟函数说明

我在我的程序中使用了这个函数:

我从一个示例中复制粘贴,但我不理解这部分代码:

任何人都可以向我解释这段代码是什么?它在程序中是如何工作的?

PS。我试图用这个来改变那个代码,但它没有用:

0 投票
1 回答
622 浏览

c++ - QStateMachine 获取导致状态转换的事件

我创建了一个 QStateMachine 并且我必须获取导致状态转换的事件。没有任何机会进入我的插槽EnterStateInit()中导致此呼叫的信号。这是我的示例代码:

0 投票
1 回答
320 浏览

qml - StateMachine 和 State 中的 QML 范围

我阅读了有关 QML 范围的文档。

此文档允许以下内容(在上述文档中的组件实例层次结构第二个示例下):

我的状态机 ( BaseStateMachine.qml):

我的州(BaseState.qml):

我的主要(main.qml):

但我收到以下错误: qrc:/qml/BaseState.qml:4: ReferenceError: someProperty is not defined

我是不是误会了什么?我还阅读了 qml 中关于 StateMachine 的文档,并没有发现 StateMachines 和 States 中的范围界定有任何例外。

更新:

如果我添加一个BaseStateMachine.qml像这样的 id:

然后 QtCreator 就会意识到somePropertyin BaseState.qml. 在“开始意识到”下,我的意思是,如果我 ctrl/command+click 中的属性,BaseState.qml它会将我带到BaseStateMachine.qml. 一旦我从BaseStateMachine.qmlQtCreator 中删除 id 就找不到someProperty了。

0 投票
2 回答
297 浏览

c++ - 如何使用 QStatemachine 来影响 ListView?

我有这个使用 QStatemachine 来管理 UI 的 Projekt,我想在其中添加自定义列表。UI 应该只由关键事件操作。据我了解,我需要 qml 端的 ListView 。

ListView 的委托只对鼠标输入或直接键输入做出反应。但是我使用 C++ 中的 QStatemachine 来操作它,因为它正在处理 UI 的所有关键事件。当我按下右箭头键时,我想要发生的事情是将列表向左移动。
(currentItem 总是在屏幕中间。)

这是 lisfview 的初始状态

在此处输入图像描述

所以我的 ListView 目前看起来像这样。

c++ Statemachine 是一个 QStatemachine,它向 qml 发送信号。

如何将信号绑定到 Listview 的委托?

0 投票
1 回答
264 浏览

python - 在运行时将 QState.assignProperty 与动态值一起使用

QStateMachine对正确使用 -System有疑问PyQt5

使用

允许在活动时设置"Some text"plainText- 属性aState

问题:如果"Some text"在执行之前不是常数或已知的怎么办?我的意图是传递一个函数(与将partialorlambda表达式连接到事件不同)而不是在进入状态时会产生适当值的值。

我模拟这种行为的唯一想法是连接一个将属性设置为aState.entered. 但是我对该解决方案不满意,因为它混淆了设置属性的位置,并且使用它的一个原因QStateMachine是避免必须自己手动设置状态。

0 投票
1 回答
199 浏览

c++ - 子类化和修改 QStateMachine

假设我有一包运行 QStateMachine. 这些机器人的所有状态机都具有相同的基本结构:

  • 状态:
    • 睡觉
    • 搜索
    • 破坏
    • 返回
  • 转换 ( from-> toon signal:
    • 睡眠 -> 搜索“下一步”
    • 搜索 -> 在“下一个”上销毁
    • 销毁 -> 搜索“下一个”
    • 销毁 -> 返回“返回”
    • 搜索 -> 返回“返回”
    • 返回 -> 搜索“下一个”
    • 返回 -> 在“返回”上睡觉

// base.h

// base.cpp

现在我想要一个更具体的机器人。假设他在破坏过程中更加详细,具有几个子状态,例如dismantel -> sprayWithAcid -> blowUp -> desintegrate,他在每个next- 信号上继续前进,或者他继续在return-back信号上。

如前所述,我的计划是将它们作为子状态添加到 statedestroy中,但信号next不仅会继续子状态机直到完成,还会离开父状态。

我怎样才能避免这种情况?还是有其他类似的好方法?

0 投票
1 回答
1001 浏览

qt - QStateMachine 中的事件是如何管理的?

我使用基于QScxmlStateMachine. 一些转换由onEntry处理程序中的代码自动触发,另一些则由外部事件(例如用户单击)触发。

状态机的执行是异步的。此代码没有阻塞:

美好的。我想知道的是状态机内部的处理是如何完成的。
这第一个事件是排队的,将异步进入一个初始化状态,那么在这个状态onEntry代码中可能触发的事件呢,它们也排队了吗?内部事件循环
是否可以在处理下一个转换之前处理一些其他 GUI 事件? 而且,我认为不是,状态机事件循环是否在单独的线程中?

0 投票
0 回答
144 浏览

c++ - QStateMachine:所有状态之间的转换

我正在开发一个矢量绘图应用程序。我有一个具有 4 个 QState 的 QStateMachine:DefaultState、SelectionState、LineDrawingState、PolygonDrawingState。当用户点击相应的工具按钮时,会触发相应的转换并进入状态。用户可以在 4 种工具(和底层状态)中的任何一种之间切换。

这是问题所在。我必须为每个状态实例化 3 个转换对象,以便状态机能够从当前状态切换到任何其他状态。我的意思是我必须:

这似乎是非常多余的。有没有更简单的方法让 QStateMachine 在触发相应的转换时在所有 4 种状态之间切换?

0 投票
1 回答
83 浏览

qt - 同步 QStateMachine

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

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