SignalTransitionのサンプルコード
テスト用QML
import QtQuick 2.9
import QtQuick.Window 2.3
import QtQuick.Controls 2.2
import QtQml.StateMachine 1.0 as DSM
import QtMultimedia 5.9
Window {
id: window
visible: true
width: 640
height: 480
// StateMachine作成
DSM.StateMachine {
id: stateMachine
initialState: textState
running: true
// 初期状態
DSM.State {
id: textState
// buttonクリック時にfinalState状態へ切り替え
// ただし、checkBoxGuardがチェックされている場合は状態の変更を行わない
DSM.SignalTransition {
targetState: finalState
signal: button.clicked
guard: !checkBoxGuard.checked
}
}
// 最終状態
DSM.FinalState {
id: finalState
}
// 最終状態になった時のハンドラ
onFinished: {
text1.text = "Finished!"
color = "#ff0000"
}
}
Row {
id: row
spacing: 2
// 状態変更ボタン
Button {
id: button
anchors.verticalCenter: parent.verticalCenter
text: "Click Me!"
onClicked: {
if (checkBoxGuard.checked == false) {
enabled = false
checkBoxGuard.enabled = false
okSound.play()
} else {
ngSound.play()
text1.text = "Guard!"
}
}
Audio { id: okSound; source: "Sounds/btn01.mp3" }
Audio { id: ngSound; source: "Sounds/btn02.mp3" }
}
// ガード有効チェックボックス
CheckBox {
id: checkBoxGuard
checkable: true
text: qsTr("Guard")
onClicked: checkSound.play()
Audio { id: checkSound; source: "Sounds/btn03.mp3" }
}
}
// 状態表示テキスト
Text {
id: text1
text: qsTr("Inital State")
anchors.top: row.bottom
anchors.left: parent.left
}
}
実行結果
https://youtu.be/JoLe2rc9En4
※Linux Mint 18.2 & Qt 5.9.1使用