在Qt中,我有一个sqlite数据库,我已经加入了。其中一个表(configTable)附加了QSqlTableModel
。
该表具有简单的2列键/值结构。键是具有类似文件夹值的字符串,例如" general / name"," general / version"," foo / bar / baz"等。值是只是任意变种。
我希望以更易于浏览的QTreeView
代替QTableView
显示此数据,因为我的关键结构非常适合这种情况。
在我重新实现课程和各种疯狂的事情之前 - 有一个优雅的解决方案吗?如果我重新实现或扩展课程,我应该看哪些?
谢谢。
答案 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如何知道如何将数据转换为树模型。