分1234前回はステートマシーンフレームワークの経緯を説明し,詳しいことは省いて「アニメーションフレームワーク」の説明の最後の「パラレルアニメーションによるアニメーションの並行実行」のサンプルプログラムにアニメーションフレームワークを適用した例を示しました。今回は,ステートマシーンフレームワークの個々の機能を少し詳しく見てみましょう。ステートマシンフレームワークの使用手順ステートマシンフレームワークの基本的な使用手順は次のようになります。1状態遷移機械の生成QStateMachineのインスタンスを生成します。2状態の生成QStateのインスタンスが状態を表し,コンストラクタにはQStateMachineまたはQStateのインスタンスを指定します。インスタンスを生成します。インスタンスを渡します。状態に遷移を設定します。以下のような,簡単にトランジションを設定できるメソッドも用意されています。)QAbstractTransition::addAnimation()で必要に応じてアニメーションを付加します。4初期状態の設定QStateMachine::setInitialState()で,初期状態となるQStateのインスタンスを設定します。複合状態や並列状態の場合には,入れ子になった各状態に対して,QState::setInitialState()で初期状態を設定します。基本的なステートマシンフレームワークの適用例ステートマシンフレームワークのサンプルプログラムがQtに付属しています。Exampleで,前述のステートマシンフレームワークの使用手順を確認しましょう。このサンプルプログラムを動かすと,図1のようにクリックするたびにボタンのテキストがOffとOnに切り替わります。状態遷移図は図2のようになります。前回のサンプルプログラムの状態遷移図と本質的には同じです。Example⁠”の状態遷移サンプルプログラムを見ていきましょう。machine;「状態遷移機械の生成」です。"On");「状態の生成」です。onとoffの2つの状態を用意し,各状態でのプロパティを設定しています。このような簡単なものでは不要ですが,オブジェクト名をsetObjectName()で付けるようにしておくと,複雑な状態遷移を使ったときにデバッグがしやすくなります。off);状態に,addTransition()で遷移を設定しています。簡易メソッドを使っているので,明示的にQSignalTransitionのインスタンスを生成していませんが,内部で生成されます。QStateには以下の3つのaddTransition()メソッドが用意されています。transition)QSignalTransition,QMouseEventTransitionやQKeyEventTransitionのインスタンスを生成してから設定します。リスト1の17~18行は,以下のように書き換えられます。on);fromOntoOffTransition->setTargetState(off);QSignalTransitionのインスタンスの所有者は,offまたはonのQStateインスタンスになることに注意しましょう。*target)このサンプルプログラムで使われているメソッドです。signalにはQObject::connect()と同様に,マクロSIGNAL()によって正規化したシグナルのシグネチャ文字列を渡します。*target)無条件遷移で,遷移のためのトリガーはなく,元状態からtargetに指定した状態にすぐに遷移します。machine.addState(on);「状態の生成」の変形で20~21を削除し,9行目と13行目を以下のようにしても同じ状態遷移機械となり,同じ動作をします。machine.setInitialState(off);「初期状態の設定」です。起動直後の状態がoffになります。machine.start();「状態遷移機械の起動」です。状態遷移機械がイベントループで開始されるようにスケジューリングされます。