0

在 Qt 中,我有一个我正在拉入的 sqlite 数据库。其中一个表(configTable)有一个QSqlTableModel附件。

该表有一个简单的 2 列键/值结构。键是具有类似文件夹值的字符串,例如“general/name”、“general/version”、“foo/bar/baz”等。值只是任意变体。

我想以更易于浏览的QTreeView方式而不是 a来显示这些数据QTableView,因为我的关键结构非常适合这一点。

在我去重新实现类和各种疯狂的事情之前 - 有没有一个优雅的解决方案?如果我重新实现或扩展类,我应该看哪些?

谢谢你。

4

2 回答 2

1

您必须自己在列表value/value/value和树模型之间进行解析+映射。但是有一种(棘手的)Qt 方法可以做到这一点。

Qt Model-View 架构可以基于类来表示许多不同的数据结构QAbstractItemModel。Qt 模型必须实现一些函数来告诉视图:有多少列、行、子项等。


列表模型(Qt 提供QAbstractListModel),基本上是对视图说的模型:

  • 我有一个根项(所有数据项都由 a 表示QModelIndex,根有一个无效的父项)
  • 此根项目只有一列
  • 此根项目的行数与列表中的元素数一样多

树模型将为每个QModelIndex. Qt 的抽象模型实际上允许每个子项是一个表(QModelIndex总是有一个父项一个行列索引)。


长话短说,您必须创建一个代理模型(QAbstractProxyModel或一个合适的子类,但根据您的需要,我认为没有)。该代理将转换您QSqlTableModel发送的数据,在这里您可以告诉视图您实际上有一个树而不是列表。

您的根项目是您的数据库键列表中的项目( 的第一个元素foo/bar/whatever),但您需要重新组合具有相同键的所有根项目。

于 2017-12-13T09:18:23.583 回答
-1

AFAIK you can make it only manually.

Basically, because how did you think Qt knows how to convert your data into tree model.

于 2015-08-26T01:26:58.680 回答