Qt表模型到树模型
Qt Table model to Tree model
在Qt我有一个sqlite数据库,我在拉。其中一个表(configTable)附加了一个QSqlTableModel
。
表有一个简单的2列键/值结构。键是具有类似文件夹值的字符串,例如"general/name","general/version","foo/bar/baz"等。值只是任意的变量。
我想在更容易浏览的QTreeView
而不是QTableView
中显示此数据,因为我的键结构非常适合于此。
在我开始重新实现类和各种疯狂的事情之前——有一个优雅的解决方案吗?如果我重新实现或扩展类,我应该考虑哪些?
谢谢。
您必须自己在value/value/value
列表和树模型之间进行解析和映射。但是有一个(棘手的)Qt方法可以做到这一点。
基于QAbstractItemModel
类,Qt模型-视图架构可以表示许多不同的数据结构。Qt模型必须实现一些函数来告诉视图:有多少列,多少行,多少子等。
一个列表模型(Qt提供QAbstractListModel
),基本上是一个模型,对视图说:
- 我有一个根项(所有数据项都由
QModelIndex
表示,根有一个无效的父) - 这个根项只有一列
- 这个根项的行数和列表元素的行数一样多
树模型将为每个QModelIndex
返回适当的子节点。Qt的抽象模型实际上允许每个子项是一个表(QModelIndex
总是有一个父和一个行-列索引)。
长话短说,你必须创建一个代理模型(QAbstractProxyModel
或合适的子类,但对于你的需要,我不认为有一个)。这个代理将转换QSqlTableModel
发送的数据,这就是你可以告诉视图你实际上有一个树而不是一个列表的地方。
根项是数据库键列表中的项(foo/bar/whatever
的第一个元素),但是您需要重新分组具有相同键的所有根项。
恐怕你只能手动设置。
基本上,因为你怎么认为Qt知道如何将你的数据转换成树模型。
- Qt - QVector 和模型视图 - 从列表视图获取自定义类的最佳方法是什么?
- 如何在Qt中合并/追加/添加两个用于线程的模型?
- Qt创建者-如何删除Clang代码模型
- 将C++数据模型与Qt SCXML状态机一起使用
- 在QT C++编辑Qtable模型数据时,我需要得到一个小盒子,我需要显示编辑文本,这怎么可能?
- Qt - 为什么 QTableView 会丢失其模型()
- QT QML - 从另一个类访问 qml 模型
- Qt 模型拖放 - 无法保存类型 QJsonValue
- 模型对话框移动到主窗口后面的Qt错误
- Qt ListView 不显示C++模型内容
- Qt中数据类(模型)和视图/控制器类之间的数据通信的正确方式是什么
- Qt:从视图中删除模型
- QT TreeView问题与排序模型一起使用
- QT setCurrentIndex不会发出用于无效的模型Inderex的CurrentChange
- Qt:模型/视图框架上的数据转换
- QT表模型示例
- QTreeView模型的Qt-itemChanged信号仅适用于一级项目
- Qt自定义树模型显示正确,但有缺陷且速度慢
- 具有两种不同视图的Qt数据模型
- 标准项目模型 Qt.