如何在qabStractItemmodel衍生的模型中隐藏要隐藏的行



我正在实现基于QT的树视图,其中视图是基于QTREEVIEW的类,模型是基于QABSTRACTITEMMODEMMODEMMODEL的类。这棵树应该有数百万个节点。我正在实现一种过滤机制,其中过滤的节点只是隐藏在树视图中。(我不想使用QSortFilterProxyModel

模型的内部数据结构看起来有些类似。

class MyTreeItem
{
 ...
 private:
      QList<MyTreeItem *> _children;
      bool                _isHidden;
 };
 class MyTreeModel : public QAbstractItemModel 
 {
  ...
  private:
       MyTreeItem * _rootNode;
  };

i可以确定在填充模型数据结构时是否应过滤特定的节点(mytreeitem*)。因此,我想让qtreeview知道该项目在填充数据结构时应该被隐藏,而不是在填充后再次穿越整个树并隐藏行。

老实说,我处于设计阶段,所以我没有任何真正的代码。我的要求是,在填充数据结构时,我将确定是否应过滤当前节点,如果是,则将设置标志_isHidden。但是我不确定如何通过调用QTreeView::setRowHidden()或其他某些方式来隐藏该行。

请分享您对最佳方式的想法。谢谢。

在标准QT模型项目视图中没有内置数据标志来隐藏单元格(或行)。您可以禁用物品或制作不可选择的物品,但不能完全隐藏它们。

您当然可以循环循环模型,并手动致电QTreeView::setRowHidden(),但您表示您不想这样做,我倾向于同意(使用代理模型会更有效,更有效)。<<<<<<<<<<<<<<

因此,您很可能希望将其中一个项目视图子类取出,以获取所需的效果并根据您的自定义标志过滤它们。还有项目委托路由(也设置为视图级别,而不是模型),因此您可以通过简单地不绘画来过滤到那里的字段(但我从未尝试过)。

或按照注释中建议的使用QSortFilterProxyModel,它是为您要问的完全设计的(并且实际上不会在现代硬件上的典型GUI应用程序中添加明显的开销)。您也可以编写自己的代理模型。您只能使用所需的QSortFilterProxyModel代码的部分。

或正如我也已经建议的那样,根本不包括构建模型时不需要的行。

相关内容

  • 没有找到相关文章

最新更新