2016-06-23 2 views
0

2つのQTreeViewを扱うコードを用意しています。ここでは、アイテムが左側のツリービューから右側のツリービューに追加されます。ここでは、コードの一部です:QTreeViewまたはモデルのフィルタリングオプションを無効にする方法

MasterModel *model = new MasterModel; 
leftProxyFilterModel *leftModel = new leftProxyFilterModel; 
rightSelectedRowsFiletrModel *rightModel = new rightSelectedRowsFilterModel; 

QTreeView *leftTreeView; 
QTreeView *rightTreeView; 

leftModel->setSourceModel(model); 
rightModel->setSourceModel(leftModel); 

leftTreeView->setModel(leftModel); 
rightTreeView->setModel(rightModel); 

現在、いくつかの文字列をフィルタリングするためには、このように設定されています。

leftModel->setFilterWildcard(LineEdit->text()); 

この行は私がしたいことのオプションをすべきフィルタリングされ、両方のツリービューの内容をフィルタリングしています左ツリービューにのみ適用できます。 これを達成するために誰かが私を助けることができますか?

答えて

1

rightModelの送信元がleftModelの場合、leftModelに適用されるフィルタはrightModelにも影響します。

変更rightModel->setSourceModel(leftModel) UPDATE

rightModel->setSourceModel(model)へ:またはあなたのフィルタはrightModelに伝播しないように、あなたはQSortFilterProxyModelの別の層を追加することができます。

leftModel->setSourceModel(model); 
rightModel->setSourceModel(leftModel); 

auto leftFilteredModel = new QSortFilterProxyModel; 
leftFilteredModel->setSource(leftModel); 
leftFilteredModel->setFilterWildcard(LineEdit->text()); 

leftTreeView->setModel(leftFilteredModel); 
rightTreeView->setModel(rightModel); 
+0

私はそれを行うことができないため、 rightModelはモデルではなくleftModelからのデータを期待しているので、ソースモデルが設定されている既存の方法でそれを達成する方法はありません –

+0

私は理解できません。あなたのコードでは、 'leftModel'は独自のデータを持っていません。 'model'から全てをコピーします。さらに、 'rightModel'は' leftModel'からすべてをコピーします。 'model'を更新すると、' leftModel'(と 'rightModel')も自動的に更新されます。 2つの異なる 'QTreeView'をどのように使いたいかについてもっと詳しく説明できますか? – JKSH

+0

最初の部分は正しいと思っていますが、 'leftModel'は 'model'からeveythingをコピーしますが、 'rightModel'はleftModel全体ではなく 'leftModel'から選択した項目だけをコピーします。 –

関連する問題