3

Qt 4.8 の Model/View ドキ​​ュメントを読みました。モデル/ビュー (デリゲート/セレクションモデル) がどのように機能するかを理解していると思います。私が確信していないことの 1 つは、たとえば TreeView がある場合にデータを操作する方法です。

リストを表示する TreeView と、項目/行が選択されたときにこのリストから要素を削除するボタンがあると想像してください。ここには2つのアプローチがあります

1) PushButton のスロットで、SelectionModel と TreeView の ItemModel を取得し、model->removeRow(index.row ...) を呼び出します。このようにして、モデル (QAbstractItemModel からサブクラス化したもの) は、それが表すはずのデータを操作します。

2) PushButton のスロットで、TreeView のモデルが表す項目をデータ ソースから直接削除します。次に、モデルが基になるデータが変更されたことを TreeView に伝えることができるように、シグナル/スロットを介してデータをモデルにリンクできます。

要素を追加すると、同じシナリオが想像できます。TreeView に通知する ItemModel に変更された状態を通知するデータに新しい要素を追加する必要がありますか、それとも ItemMode を介して新しい項目を追加する必要がありますか?

これに関するベスト プラクティスのドキュメントは見つかりませんでした。2つのアプローチは大きく異なるため、どちらが望ましいかを事前に知りたい.

従うべき道を提案する人はいますか?

ありがとう

4

1 に答える 1

1

1) が望ましい - UI コードからデータ ソースを直接操作することはおそらく避けたほうがよいでしょう。少なくとも、データ操作を行うメソッドをモデルに追加し、UI コードからそのメソッドを呼び出します。

Qt のメソッドのいくつかは、モデル自体からのみ呼び出すことができるように保護されていることがわかります (例: endInsertRows など)。

于 2012-07-09T10:31:24.620 に答える