Qt表模型到树模型

时间:2015-08-25 15:52:50

标签: c++ qt qsqltablemodel

在Qt中,我有一个sqlite数据库,我已经加入了。其中一个表(configTable)附加了QSqlTableModel

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

我希望以更易于浏览的QTreeView代替QTableView显示此数据,因为我的关键结构非常适合这种情况。

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

谢谢。

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

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

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

答案 1 :(得分:-1)

AFAIK,您只能手动制作。

基本上,因为您认为Qt如何知道如何将数据转换为树模型。