QSortFilterProxyModelを使用して入力テキストによるフィルタリングを可能にし、QItemSelectionModelを使用して選択内容をツリービューに反映させるQTreeviewがあります。
質問なんですが、フィルタリング結果がアイテム選択に反映されないようにする方法はありますか?
実現したいことを描いて、現在起こっていることはこれです。
状態-1。イニシャル。
Root
|---Leaf-1 Selected (manually)
|---Leaf-2
|---Leaf-3
状態-2。たとえば、「Leaf-3」でフィルタリングすると、ツリービューに次のように表示されます。
Root
|---Leaf-3
状態-3-notIdeal。次に、フィルタリング テキストをクリアします。
Root
|---Leaf-1
|---Leaf-2
|---Leaf-3
「Leaf-1」を次のように選択したままにしたい:
状態-3-理想。
Root
|---Leaf-1 Selected
|---Leaf-2
|---Leaf-3
コードを調べると、 QSortFilterProxyModel.filterAcceptsRow が false を返す場合、QItemSelectionModel.selectionChangedの引数にdeselected
、選択を解除するアイテムの情報が設定されているようです。また、アイテムが手動で選択解除されたのか、フィルタリングによって選択解除されたのかを区別する方法を見つけられませんでした。
私はPyQt
Ubuntu 12.10で使用していますが、これはすべてのQt
実装に適用できるはずです。