0

簡単なリストがあります: mylist = ["foo", "bar", "baz"]

および1列のQtTableWidget。mylistドラッグ アンド ドロップの並べ替え (つまり、ユーザーがそれを行うことができ、更新される) とプログラムによる変更 (つまり、私が更新するmylistとテーブルが取得される)を含め、mylist のデータを QtTableWidget のデータと同期させたいと考えています。更新しました)。

これを行う正しい方法は何ですか?

4

1 に答える 1

2

一般に、Qt/C++ では一般的なデータ構造をビューにリンクする方法がないことに注意してください。モデルは、ビューとの簡単なリンクを可能にする、インストルメント化されたデータ構造です。一般的なリストは、そのようQStringListには使用できません。

Python では、任意のリストの既存のインスタンスに属性を注入して、それに対して行われた変更をそのビューに通知するモデルに変えることができるはずです。Qt-to-Python ブリッジがそのようなことを行うかどうかはわかりません。これについては C++ の視点しか提供できません。PyQt または PySide を知っている人は、必要に応じて参加して編集してください。

モデルにはa を使用しQStringListModelます。次のように、ビューでドラッグ アンド ドロップの並べ替えを有効にします。

view.setDragEnabled(true);
view.setDropIndicatorShown(true);
view.setDragDropMode(QAbstractItemView::InternalMove);

の他の答えQListWidgetには、組み込みモデルで便利なウィジェットを使用する完全な例があります。出発点としてはこれが良いかもしれません。マウスで合理的に操作できるリストの場合、これは良い選択です。一般に、モデルに数百の項目がある場合、リアルタイムでの検索や何らかの剪定を行う方法がなければ、マウスだけで簡単に操作することはできません。非常に多くの項目をスクロールすることは、ユーザビリティの悪夢です。だからやらないでください。

Qt のドキュメントは、学習を開始するための良いプレートになります。モデル/ビュー フレームワークについてお読みください。次に、選択したビューを見て、またはQStringListModelと言います。QTableViewQListView

于 2012-06-28T20:44:41.137 に答える