QTベースのツリービューを実装しています。このビューは、QTreeViewベースのクラスで、モデルはQAbstractItemModelベースのクラスです。ツリーには数百万のノードがあるはずです。フィルタリングされたノードがツリービューに隠れているフィルタリングメカニズムを実装しています。 (私はQSortFilterProxyModel
を使用したくない)QAbstractItemModelの派生モデルで非表示にする行をフラグする方法
モデルの内部データ構造は、このように見えます。
class MyTreeItem
{
...
private:
QList<MyTreeItem *> _children;
bool _isHidden;
};
class MyTreeModel : public QAbstractItemModel
{
...
private:
MyTreeItem * _rootNode;
};
モデルデータ構造が入力されている間に特定のノード(MyTreeItem *)をフィルタリングする必要があるかどうかを判断できます。だから私は、QTreeViewに、ツリー全体をもう一度トラバースして、データの投入後に行を隠すのではなく、このアイテムを隠すべきであることを知りたいと思っています。
正直、私は設計段階にいるので、実際のコードはありません。 私の要件は、データ構造を設定する際に、現在のノードをフィルタリングするかどうかを決定し、そうであればフラグ_isHidden
を設定します。しかし、私はQTreeView::setRowHidden()
やその他の手段で呼び出すことで行を隠すべき時をビューに知らせる方法がわかりません。
これを行うにはあなたの考えを共有してください。おかげさまで
['QSortFilterProxyModel'](http://doc.qt.io/qt-5/qsortfilterproxymodel.html)を使用しないのはなぜですか?あなたが与えた説明から、それは仕事のための正しいツールであることは明らかです。 –
@ G.M。私のプロジェクトチームは、 'QSortFilterProxyModel'を使うことは性能上の負担だと判断しました。だからそれは方程式の外でなければならない。 – susiriss
モデルにアイテムが表示されないようにするには、最初にそのアイテムを含めるのはなぜですか?それを追加しないでください。 –