Как пометить строки как скрытые в модели, производной от QAbstractItemModel

susiriss спросил: 26 ноября 2017 в 04:27 в: qt

Я реализую древовидное представление на основе Qt, где оно представляет собой класс на основе QTreeView, а модель представляет собой класс на основе QAbstractItemModel. Дерево должно содержать миллионы узлов. Я реализую механизм фильтрации, в котором отфильтрованные узлы просто скрыты в виде дерева. (Я не хочу использовать QSortFilterProxyModel)

Внутренняя структура данных модели выглядит примерно так.

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

Я могу определить, должен ли определенный узел (MyTreeItem) быть отфильтрован во время заполнения структуры данных модели. Поэтому я хочу сообщить QTreeView, что этот элемент должен быть скрыт при заполнении структуры данных, а не при повторном обходе всего дерева и скрытии строк после заполнения.

Честно говоря, я нахожусь на стадии проектирования, поэтому у меня нет никакого реального кода. Мое требование заключается в том, чтобы при заполнении структуры данных я определял, должен ли текущий узел фильтроваться, и, если это так, установит флаг _isHidden. Но я не уверен, как сообщить представлению, когда нужно скрыть строку, вызвав QTreeView::setRowHidden() или каким-либо другим способом.

Пожалуйста, поделитесь своими мыслями о том, как лучше всего это сделать. Спасибо .

0 ответов