4.6で導入されたQtのステートマシーンフレームワークは,状態遷移による実行モデルをQtアプリケーションフレームワークで利用できるようにしています。Qtのメタオブジェクトシステムと密接に結びつけられて実装されいて,状態間の遷移はQtのシグナルやキーイベント,マウスイベントなどのイベントによって引き起されます。Qtのプロパティ(筆者が以前書いた特集記事「Qtの基本プログラミング~オブジェクトモデル」参照)を使って状態の規定もできます。XML)に基づいています。LabsのProjects/xml/scxmlで試みられています。このプロジェクトでは,以下の3つの実装がなされています。Chromeなどを使って,実際にデモを動かすことができます。UIのQMLとの併用も試みられています。今回紹介するアニメーションプログラムのソースリストはこちらからダウンロードしてください。examples.zipステートマシンフレームワークのクラス図1は,ステートマシンフレームワークに用意されているクラスです。主要なクラスの機能概要は表1のようになります。QState状態機械中の状態で,初期状態のプロパティinitialStateや並列状態を区別するプロパティchildModeがあります。QFinalState状態機械中の終了状態。QHistoryState前の活性化された副状態への復帰に用いる。QEventTransitionQtのイベント対するQObjectに特化した遷移で,QObjectのインタンスとイベントを束ねたオブジェクトです。QKeyEventTransitionキーイベントによって引き起される遷移。QMouseEventTransitionマウスイベントによって引き起される遷移。QSignalTransitionQtのシグナルによって引き起される遷移。アニメーションの書き換え詳しい説明は次回に回し,前回の「アニメーションフレームワーク」の説明の最後の「パラレルアニメーションによるアニメーションの並行実行」のサンプルプログラムにアニメーションフレームワークを適用して書き換えてみましょう。図2は,適用した状態遷移図です。サンプルプログラムanimatedtransitionの状態遷移図startState状態は,アニメーションの開始待ち状態を表します。図2の左の黒丸からの矢印は,この状態が初期状態であることを示しています。この状態をプロパティで以下のように規定しています。セットし,位置を左端にする。endState状態は,アニメーションの完了状態を表します。状態機械の終了状態ではなく,アニメーションの終わりを示します(正確には,アニメーションが始まるとendStateに遷移しています⁠)⁠。この状態をプロパティで以下のように規定しています。ボタンのテキストに"Reset"をセットする。セットし,位置を左端にする。movingBallTransition遷移は,startState状態にあるときにボタンがシグナルclicked()を送信することで引き起される遷移です。状態でのボタンのクリックで,アニメーションが始まるようにします。resetTransition遷移は,endState状態にあるときにボタンがシグナルclicked()を送信することで引き起されます。状態に戻って,アニメーションの開始待ち状態となります。前回の説明で補足したように,書き換えると3つのボールを左端に戻すのを初期状態としてわかりやすく記述できます。これを実行させた模様は次の動画のようになります。書き換えたアニメーションでは,書き換えたサンプルコードの要点を変更箇所を中心に説明します。