2

私はPythonとPyQtが初めてです。4 つの QtTreeWidgets を同期させて、アイテムがすべてのアイテムのすべての属性と同様に同じになるようにする最良の方法は何ですか? これらのウィジェットは、セッション中のさまざまなタイミングでさまざまなダイアログ ボックスに表示されます。さまざまな理由から、既存のコード、シグナル、およびレイアウトを可能な限り元のままにしておく必要があります。Model/View 部門は明らかに最初の場所ですが、ツリーへのアクセスまたはツリーの更新に使用されるメソッドには触れたくありません。数か月以内に全体をリファクタリングする予定ですが、それまでに何かを急いで実行する必要があります。

各 QTreeWidget は便利なクラスであるため、それぞれに独自のデータがあります。UI は Qt Designer で管理されていますが、そのままにしておきたくありません。

各ダイアログが初期化されると、ツリーが表示されます。アプリケーションには、すべてのダイアログがその変数/属性を参照するために使用できるシングルトン クラスがあります。

各親ダイアログの初期化で、「locationTree」属性がシングルトンに存在するかどうかを確認できませんでした。そうでない場合は、初期状態を入力し、ダイアログ内のツリーでそれまたはそのコピーを使用する必要があります。ダイアログ ツリーの状態がトラップできる方法で変更されるたびに、シングルトン 'locationTree' を更新して変更を反映したいと考えています。QTreeWidgetItem にはクローン メソッドがありますが、QTreeWidget 全体に対応するメソッドは見当たりませんでした。

既存のコード ベースと GUI レイアウトへの最小限の変更でこれを達成するにはどうすればよいでしょうか?

ジョン

4

2 に答える 2

3

はい、MVC機能を使用するのが道です...

を使用しQTreeWidgetていても、から派生したクラスを使用しているQAbstractItemViewため、model()およびのsetModel()呼び出しが利用できます。作成中のウィジェットの 1 つからモデルを取得し、それを他のウィジェットに設定します。ウィジェットの 1 つのデータを変更すると、他のウィジェットはモデルの同じインスタンスを使用しているため、それに追随します。

ウィジェット (ツリーのどの部分が開いているか、閉じているか) のすべてで同じ選択状態を維持する必要がある場合、それは少し難しいかもしれませんが、同じ selectionModelselectionModel()setSelectionModel()

于 2011-09-04T13:04:49.227 に答える
0

Model/View を使用することが最善の方法であることは間違いありません。

しかし、ツリー ウィジェットに含まれる項目のおよその数と、それらが更新される頻度を把握していなければ、別のアプローチを比較検討することは困難です。また、使用している Qt のバージョンは何ですか?

更新と項目の数がそれほど多くない場合、継承するクラスを導入してQObject(シグナルとスロットを持ちます)、すべての QTreeWidget を同期させる責任を負うようにする方法があります。

各 QTreeWidget のシグナルとスロットを他の 1 つのオブジェクトに接続することで、すべてのツリー ウィジェットが他のすべてのウィジェットを認識するという悪夢を回避できます。

于 2011-09-04T08:20:31.843 に答える