問題タブ [qstatemachine]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
1592 参照

c++ - レイアウトでの Qt ステート マシンの遷移

さて、私は Qt アプリケーションを開発しており、Qt State Framework を使用していくつかのアニメーションを作成したいと考えています。

最初: 状態遷移を使用して、水平レイアウトに含まれるボタンのグループを別の垂直レイアウトにアニメーション化するにはどうすればよいですか?

2 番目: 状態のときにウィジェットを表示するにはどうすればよいですか? メニューの例: ユーザーがメニューのボタンをクリックすると、ウィジェット (以前は widget->hide() で非表示にされていたもの) が表示されます...???

これはコード例です:

0 投票する
0 に答える
222 参照

qt - 2 つの QStates の間に独自のアニメーションを追加する

QGraphicsItemを正常にアニメーション化するクラスがあります。

QGraphicsItemが動いていないとき、その状態が s1になるように、s1 と s2 という2 つのQStatesを追加できるクラスを変更したいと考えています。状態が s2 に変わる間、定義済みのアニメーション クラスに移動する必要があります。最後に、状態を s2 に変更する必要があります。以下のコードでこれを実装しようとしましたが、うまくいきません。理由を説明できますか?

ありがとう。

0 投票する
1 に答える
3894 参照

c++ - QStateMachine 状態遷移アクションを実装するには? QSignalMapper?

私は主にシーケンシャルなフローだけでなく、いくつかの代替パスを持つプログラムを構築しています。Qt はQStateMachineなどのクラスを提供しているため、ステート マシンがこれを実装する最も簡単な方法であると考えました ( APIも参照)。

ただし、かなりの数の状態 (20 以上) があるようです。また、さまざまな遷移イベントがいくつかあります (ボタン 1 ~ 10 としましょう)。たとえば、ボタン x を押すと、状態 13 から 14 に遷移します。

各状態に入ったり出たりすると、パラメーターを使用して特定の関数を実行できる必要があります。各状態はそのようなシグナルを発しますが、パラメーターを渡すことはできないため、多数のパラメーターのない関数が必要になる可能性があります。

「state-entry」でプロパティを設定できるのQAbstractStateと同様のメソッドがない限り、この問題の再実装も面倒に思えます。assignProperty()QObject

QSignalMapper複数のアクションを処理するために、各状態の遷移信号に複数の Signal-Slot-Connections を使用するのは適切なアプローチですか?

0 投票する
2 に答える
1242 参照

c++ - QStateMachine ダミー状態からの即時遷移

遷移に応じてオブジェクト プロパティを設定するには、すぐにさらに遷移する 2 つの中間状態が必要です。

(あるいは、B を複製して、それぞれのプロパティを直接設定することもできます。)

状態のentered()シグナルを独自の遷移ソースとして使用できますか?

0 投票する
1 に答える
889 参照

python - QStateMachine: QEvent とシグナルの違いは?

私は現在、PyGTK から PySide に小さなアプリケーションを移植しています。これはシステム トレイにあり、定期的にサーバーの更新をチェックします。

これを最初に書いたとき、カスタム状態モデルを使用してその動作を表現しました。

アプリケーション状態モデル

  • init: 初期状態
  • check: サーバーの更新を確認します
  • disconnected: サーバーに接続されていません (しばらく待ってから再試行してください)
  • エラー: サーバーがエラーを報告しました (ユーザーは続行する前に設定を確認する必要があります)
  • アイドル: POLLING INTERVAL 秒待機してから、再度チェックします
  • 終了する

その後、Qt には QStateMachine があり、このタイプの構造に最適と思われることを発見しました。しかし、私の問題に満足のいく例を適用することができませんでした!

特に:

  1. QStateMachine のコンテキストでは、Signal と QEvent の違いは何ですか?
  2. 条件付き遷移を定義するにはどうすればよいですか。つまり、エラーが発生した場合に ... に移動しますか?
  3. プログラム ロジックは Transition.onTransition() または QState.onEnter() で発生する必要がありますか?

どんなポインタでも大歓迎です!

0 投票する
0 に答える
1417 参照

c++ - QSignalTransition を持つ QStateMachine がシグナルを失う

QStateMachine に奇妙な問題があり、1 週間解決できません。

簡単な説明:

COM ポート経由で接続された生物医学デバイスへのコマンドの送信を制御するために、アプリケーションで QStateMachine を使用しています。ステート マシン全体は、何百ものステートと頻繁なサブステートで複雑になっています。

マシンは、ユーザーの設定に基づいて、デバイスの通信プロトコルから生成されています。たとえば、ユーザーがデバイスから何らかの「反応」を求めている場合、この反応は基本的なステップ (デバイスへの指示) で構成されるいくつかのサブ反応で構成されます。アプリケーションは、これらの基本的なステップから全体の反応を構築し、ステート マシンで開始します。

したがって、特定のサブステートからコンポジットを構築できるクラスCompositeReactionControl (QState から継承) を作成しました。

QSignalTransition インスタンスは、状態を相互に接続するために使用されます。

問題の説明:

前の状態の finish() シグナルが発行されたときに、マシンがある状態から別の状態に遷移しないことがあります。

ノート:

  1. 状態が接続されていることを 100% 確信しています。
  2. 信号が発せられていることは 100% 確信しています。
  3. マシンを介したイベントとその状態は、アプリケーションの残りの部分とは別のスレッドで実行されます。この特定のシグナルが発生し、同じスレッドでキャッチされます
  4. すべての反応でランダムに発生します (この問題に関連する特定の反応またはサブ状態はありません)。
  5. 1 回の実行 (反応) で問題を引き起こしたサブステートは、同じ反応の別の実行では問題なく実行されます
  6. StateMachine が長時間実行されている場合に発生し、4 番目の反応の前には表示されません (ユーザーがどの反応を選択しても)。

コード

問題のある部分は、次のコードで「HERE IS PROBLEM」というコメントでマークされています...

CompositeReactionControl への新しいサブステートの追加:

PassTransition:

良いケースからのログ

この場合、すべてがうまく機能します。重要なのは、PassTransition::EventTest がタイプ 192 のイベントを受け取ることです。これは、前の状態の finished() シグナルから作成されたステート マシン イベントです。

悪いケースからのログ

ご覧のとおり、RANDOMLY エラーが発生した場合、前述のイベントはメソッド PassTransition::EventTest によって受信されません。5 秒のタイムアウトの後 (さらに長い間隔を試しました)、ステートマシンを停止してエラーを出力します。

0 投票する
1 に答える
1845 参照

python - QStateMachine addtransition でカスタム シグナルを使用する方法

QStateMachine と組み合わせて独自のカスタム シグナルを使用する方法を見つけようとしています。hereの簡単な例から始めました。今、私は新しい信号を作成し、mysignalそれからトランジションをトリガーしようとしています。しかし、 への呼び出しを構造化する方法や、を参照する構文addtransitionの使用方法がわかりません。SIGNAL("clicked()")mysignal