我正在实现一个基于 Qt 的树视图,其中视图是基于 QTreeView 的类,模型是基于 QAbstractItemModel 的类。这棵树应该有数百万个节点。我正在实现一种过滤机制,其中过滤掉的节点只是隐藏在树视图中。(我不想用QSortFilterProxyModel)
模型的内部数据结构看起来有点像这样。
class MyTreeItem
{
...
private:
QList<MyTreeItem *> _children;
bool _isHidden;
};
class MyTreeModel : public QAbstractItemModel
{
...
private:
MyTreeItem * _rootNode;
};
Run Code Online (Sandbox Code Playgroud)
我可以确定在填充模型数据结构时是否应过滤特定节点 (MyTreeItem*)。所以我想让 QTreeView 知道这个 item 应该在填充数据结构时隐藏,而不是再次遍历整个树并在填充后隐藏行。
老实说,我处于设计阶段,所以我没有任何真正的代码。我的要求是,在填充数据结构时,我将确定是否应该过滤当前节点,如果是,将设置标志_isHidden。但我不确定如何通过调用QTreeView::setRowHidden()或其他方式让视图知道何时隐藏该行。
请分享您对执行此操作的最佳方式的想法。谢谢。