Qt表模型到树模型

Qt Table model to Tree model

本文关键字:模型 Qt      更新时间:2023-10-16

在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知道如何将你的数据转换成树模型。