мой вопрос касается Qt и его QAbstractItemModel .
У меня есть карта строк и двойников (std::map<stringclass, double>
), которую я хотел бы представить в виджете Qt. Хотя для этого я мог бы использовать QTableView , я хотел бы использовать тот факт, что ключи карты имеют форму "abc.def.ghi
", где может быть несколько строк, которые могут начинаться с "abc.def
" и даже больше, которые начинаются с "abc
".
Итак, я хотел бы настроить древовидную модель данных для представления элементов в QTreeView , например
(-) abc
|--(-)def
|--ghi 3.1415
|--jkl 42.0815
|--(+)pqr
|--(+)xyz
Ключи моего std::map
- это листья дерева, где все другие узлы будут временными и вспомогательными конструкциями для поддержки свертывания для удобства пользователя.
К сожалению, методы rowCount
, index
, columnCount
и data
имеют const-модификаторы, поэтому я не могу просто установить вспомогательную структуру данных для заголовков внутри моего QAbstractItemModel производного и измените эту структуру данных там.
Что было бы лучшим для этого? Должен ли я установить другой слой класса между моим std::map
и QAbstractItemModel или есть более разумный способ сделать это?
Редактировать 1: std::map
может измениться, пока QTreeView отображается и используется, поэтому вспомогательные узлы могут быть выброшены и восстановлены. Я предполагаю, что лучший способ справиться с этим - это реструктурировать QAbstractItemModel - или я должен просто выбросить эту модель и назначить вновь созданную модель для QTreeView ? В этом случае я мог бы настроить все узлы в конструкторе, не беспокоясь о постоянстве методов, я думаю.