【发布时间】:2018-07-27 01:43:06
【问题描述】:
我正在构建一个程序,该程序具有大部分顺序流程,但也有一些替代路径。我认为状态机可能是实现这一点的最简单方法,因为 Qt 提供了这样一个类:QStateMachine(另见API)。
但是,我似乎有很多州(20 多个)。另外,我有许多不同的转换事件(比如说按钮 1-10)。所以例如按下按钮 x 将导致状态 13 到 14 的转换。
进入或离开每个状态都应该能够执行带参数的特定函数,而每个状态都发出这样的信号,但不可能传递参数,因此它可能需要大量的无参数函数。
在这个问题上重新实现QAbstractState 似乎也很乏味,除非它有类似于assignProperty() 的方法,它允许在“state-entry”上设置QObject 属性。
QSignalMapper 以及用于每个状态的转换信号的多个 Signal-Slot-Connections 以处理多个操作是一种合适的方法吗?
【问题讨论】:
-
顺便说一句:如果你在一个“相当线性的程序”中有 20 个状态和 10 个按钮,每个按钮都转换到不同的状态,那么你可能在概念层面上做错了。
-
@Zimano 感谢您的意见。但是请不要引用我没有写的东西。另外:您基本上只是在说我做错了,这可能是一个很好的提示,但这并没有真正的帮助。那么 - 我该如何正确地做到这一点呢?
-
不,我不是“基本上只是说你做错了”。你可能做得很完美。我的意思是,如果状态的数量如此之多,并且相当多的按钮会生成独特的状态转换,而整个程序是“顺序的”并带有一些替代路径,那么您的设计中可能存在概念错误,而您可能会重新定义您的状态及其转换。我不知道你在建模什么或者你的领域是什么,所以我不能给你任何方向。我只是注意到这一点。我没有写任何东西,也无意发布答案
标签: c++ qt state-machine qstatemachine