Имея данные, хранящиеся в QVector<QVector<QString>> data;
(или, альтернативно, список списков строк, если вы являетесь Pythonist), как я должен подкласса QAbstractItemModel
отображать (только для чтения) такую простую структуру в QTreeView
? Я хотел бы увидеть что-то вроде этого:Простой двухклассический иерархический подкласс QAbstractItemModel
- "Группа 1"
- данных [0] [0]
- данных [0] [1]
- «группа 2 "
- данные [1] [0]
- данные [1] [1]
т.д.
Из документов я читал, что я должен переопределить index()
, parent()
, rowCount()
, columnCount()
и data()
. Какова самая простая реализация этих методов для достижения моей цели?
Чтобы сделать возможный ответ более информативным, как может быть один подкласс QAbstractItemModel
без использования внутренних указателей (хранится в QModelIndex
). Все примеры, которые я видел, используют базовую модель в форме дерева с узлами (с указателями на их дочерние элементы и родительские узлы), которые легко переносятся внутри QAbstractItemModel
с использованием внутренних указателей. Но можем ли мы использовать QAbstractItemModel
даже без базовой структуры с деревом/узлом и без внутренних указателей QModelIndex
? Мой вопрос основан на документах, говорящих, что вы можете использовать внутренние указатели, но я еще не видел никаких примеров без него.
Недостаточно вашей структуры данных для представления иерархии уровня 2. Чтобы быть конкретным, нет хранилища для строк верхнего уровня, то есть «группа 1», «группа 2» и т. Д. В терминах python вам нужно что-то вроде: «[[« group1 », [1, 2, 3]], ["group 2", [1, 2, 3]], ...] '. – ekhumoro
Если вы не использовали внутренние указатели, как бы вы сопоставили индекс модели с местоположением в своей структуре данных? Похоже, вам понадобится сделать обход «снизу вверх», используя «parent()», чтобы вычислить цепочку индексов в структуру данных. И это нужно было бы постоянно пересчитывать почти по каждому методу модели, делая это (кумулятивно) очень дорогостоящая операция. Поэтому, возможно, поэтому все примеры основаны на внутренних указателях (которые эффективно кэшируют дорогостоящую операцию поиска). – ekhumoro