QML 状态机因信号而崩溃

Posted

技术标签:

【中文标题】QML 状态机因信号而崩溃【英文标题】:QML State Machine crashing with signal 【发布时间】:2016-05-24 22:16:53 【问题描述】:

以下 QML 状态机在我运行时在启动时崩溃:

import QtQuick 2.0
import QtQml.StateMachine 1.0

Item 
  id: thingy
  signal somethingHappened

  StateMachine 
    initialState: stateA
    running: true

    State 
      id:stateA
      onEntered:console.log('entered A')

      SignalTransition 
        targetState: stateB
        signal: thingy.onSomethingHappened
      
    

    State 
      id: stateB
      onEntered: console.log('entered B')
    
  

输出只是“程序意外完成。”

如果我将signal: thingy.onSomethingHappened 更改为signal: thingy.nope——或者如果我删除signal somethingHappened 行——那么它会按预期工作(除了我实际上无法获得触发状态更改的信号)。

我做错了吗?知道为什么会崩溃吗?

如果重要的话,在 Ubuntu x64 上使用 Qt 5.6。

【问题讨论】:

【参考方案1】:

PEBCAK。我应该写没有on前缀的信号名称:

signal: thingy.somethingHappened

is 是 Qt 运行时中的一个错误,当转换信号像这样设置不正确时,它会出现段错误。此错误已提交(并修复)为http://bugreports.qt.io/browse/QTBUG-53596

【讨论】:

以上是关于QML 状态机因信号而崩溃的主要内容,如果未能解决你的问题,请参考以下文章

Moore型状态机和Mealy型状态机

三段式有限状态机Verilog代码

27.Qt Quick QML-StateTransition

同步 QStateMachine

FPGA状态机跑飞问题记录

Finite State Machine 是什么?