12

ご挨拶、

細胞の境界を検出する科学的なQTアプリケーションを開発しています。以下のプロトタイプスナップショットを参照してください。

ここに画像の説明を入力してください ここに画像の説明を入力してください

今、私たちはこれを優れたデザインとアーキテクチャを備えたオープンソース製品として開発する予定です。私たちは、それが多くの複雑なアクションとフローを持っていることを確認しました。例:等高線ノードの移動、等高線ノードの削除、等高線ノードの追加、バリアの描画、複数のノードの選択...など

UIにQTステートマシンフレームワークを使用したいと考えていましたが、フロー/アクションごとに複数のステートマシンインスタンスを使用するのか、それとも1つの「巨大な」ステートマシンを使用するのか疑問に思いました。unde / redo操作が必要ですが、QTState-MachineFrameworkをQTUndo/ Redo Frameworkと相互作用させることは可能ですか?

[編集]QTSM Framekworkを使用してUIインタラクションを処理することは本当に可能ですか?彼らはGIMPまたはCADアプリケーションでどのようなデザインを使用していますか?

よろしくお願いします、umanga

4

2 に答える 2

6

ステートマシンは、ユーザーの操作を表すのに実際には正しい選択ではないと思います。これは、ユーザーインターフェイス自体の変更を簡単にモデル化するのに適しています。

おそらく必要なのは、ステートマシンとコマンドデザインパターンの組み合わせです。これは、QtではQUndoStackクラスとQUndoCommandクラスによって部分的に実装されています。ステートマシンはユーザーインターフェイス自体への変更を追跡し、コマンドクラスはユーザーの操作を追跡します。セルの境界線の検出についてはよくわかりません。また、アプリでインタラクションモデルをどのように計画しているかはわかりませんが、明確にするために、作り話の例を試してみましょう。

アプリに、ユーザーから提供された概算から開始してセルの境界を検出する2つの異なるアルゴリズムがあるとします。1つは、セルの周りの大まかなポイントごとのパスを取ります。もう1つはフリーハンドの輪郭を取ります。また、ユーザーがセル画像にコールアウトメモを追加できるようにする必要があります。また、ユーザーが現在使用しないツールでユーザーの画面を乱雑にしたくないとします。

次に、3つの異なる対話モードがあり、それぞれにユーザーが使用できる異なるアクション(またはツール)があります。

  1. ポイントごとに。ユーザーは、ポイントの追加、ポイントの削除、ポイントの移動、ポイントの選択、および境界線の調整を行うことができます。
  2. フリーハンド。ユーザーは「鉛筆」と「消しゴム」で描画し、境界線を洗練することができます。
  3. コールアウトノート。ユーザーは、メモの追加、メモの削除、メモの移動、メモの矢印の再配置、およびメモのテキストの編集を行うことができます。

ツールを提供することに加えて、最初の2つのモードでは、ユーザーがアルゴリズムのパラメーターを調整できる場合もあります。

アプローチは、1、2、および3のそれぞれをステートマシンの状態として表すことです。状態の1つに入ると、ツールが表示されます。状態が終了すると、ツールが非表示になります。状態の変更は、たとえばツールバーボタンを使用して実行できます。

これで、ツールを使用してその下のモデルを変更すると、QUndoCommandもQUndoStackに格納されます。ユーザーがフリーハンドモードになっているとします。ここで、彼女はポイントツーポイントモードに切り替え、パラメーターを微調整し、2つのポイントを追加し、ポイントを移動してから、それを削除します。UNDOスタックは、下から上に次のようになります。

  1. フリーハンドモードからポイントツーポイントモードに切り替えます
  2. パラメータεを0.00001から0.002に変更します
  3. (120、40)にポイント#1を追加
  4. (403、11)にポイント#2を追加
  5. ポイント#1を(120、40)から(350、120)に移動します
  6. ポイント#1を削除

状態の変更が取り消しスタックに追加されたため、一連のコマンドを元に戻すと、ユーザーはそれを発行したときの場所に正確にとどまることに注意してください。たとえば、彼女が1まで戻っていない場合、彼女はフリーハンドモードに戻ります。

まとめると

  • Qtのステートマシンは、ユーザーインターフェイスの変更を追跡するのに適しています。
  • コマンドデザインパターンは、基になるモデルでユーザーが行った変更を追跡するのに適しています。
于 2010-07-18T13:25:57.377 に答える
2

単純なUI遷移のために、Qtのステートマシンフレームワークとアニメーションフレームワークを実験しました。彼らのドキュメントやサイトにこれを行う方法のチュートリアルや例があると思います。そうです、それは可能です。

それがどれだけうまく拡張できるか、または最高のアーキテクチャかはわかりません。私の場合、階層機能を利用して、多くの単純なステートマシンを使用しようとします。

于 2010-07-09T03:21:33.443 に答える