2

Qt のundo フレームワークQUndoCommandでは、インスタンスのスタックを持つことができます。これらはそれぞれ、ユーザー インターフェイスでのアクションを説明しています。私たちのアプリケーションでは、一連のモデルで動作する一連のビューがあり、一部は組み合わせて使用​​されます。多くの場合、同じモデル セットで複数のビューが動作します。私は現在、このフレームワークに基づいてアクションを元に戻す機能を検討しています。

さて、私は UI アクションを記述するコマンド クラスを持つ一般的なパターンに精通していますが、これらは UI 要素の状態変化または基になるモデルのデータ変化を表すものでしょうか? コマンド クラスに含まれるデータと状態の量はどれくらいですか?

私の要点を説明する例: QStandardItemModelas base モデルがあり、その上にいくつかの proxy モデルがあるとします。各プロキシ モデルは、特定の値の発生によるフィルタリングなど、さまざまな変換を行います。次に、これらのプロキシ モデルの 1 つの値を具体的に変更するコマンド クラスを作成し、フィルター条件が変更されると、そのコマンド クラスの状態が無効になります。そのため、フィルターの状態、または最終的な基になるモデルへのマッピングも含める必要があります。もう 1 つのオプションは、UI のすべての状態変更 (たとえば、フィルター条件の変更を引き起こすもの) に対するコマンドも追加することですが、これの欠点は、元に戻すコマンドのリストがかなり大きくなることです。

ここでのベストプラクティスは何ですか?

4

1 に答える 1

2

アプリケーションとその使用方法によって多少異なりますが、元に戻すコマンドについて私が過去に使用した一般的なガイドラインは次のとおりです。

  • データの一部ですか?その場合、ユーザーは元に戻すことができるはずです。
  • 何らかの形で保存されていますか (アプリケーション セッション間で記憶されていますか)? その場合、ユーザーはおそらく元に戻すことができるはずです。
  • プログラムの主な目的に関連していますか?もしそうなら、取り消し可能です。
  • ワークフローの中で頻繁に行われる部分ですか? もしそうなら、おそらく元に戻すことができます。
  • 何か他の変更に基づいてトリガーされますか? その場合、それ自体ではなく、他のアイテムが元に戻ったときに元に戻す必要があります。
  • *X* が発生するたびにリセットされますか? 元に戻すスタックにない場合は、回避できる場合があります。
  • 同じ動作で簡単に元に戻せますか (たとえば、追加情報の非表示/表示)? おそらく、元に戻すスタックには入れたくないでしょう。

これとあなたが書いたことに基づいて、フィルタリングが頻繁に発生するものである場合、および/または簡単に元に戻すことができない場合、元に戻す情報をモデル(データ)とビューの両方に結び付けるでしょう。フィルタリングが単純な場合 (メールの件名を検索するような基本的な部分文字列フィルタリング)、元に戻す状態の一部である必要はおそらくなく、元に戻すコマンドはデータに結び付けられるだけです。

于 2010-09-03T18:28:40.593 に答える