[英]Qt Table model to Tree model
在Qt中,我有一个引入的sqlite数据库。其中一个表(configTable)附加了QSqlTableModel
。
该表具有简单的2列键/值结构。 这些键是带有类似于文件夹的值的字符串,例如“ general / name”,“ general / version”,“ foo / bar / baz”等。这些值只是任意的变体。
我想在易于浏览的QTreeView
而不是QTableView
显示此数据,因为我的键结构非常适合QTreeView
。
在我重新实现类和各种疯狂的东西之前-是否有一个优雅的解决方案? 如果我重新实现或扩展类,应该看哪一个?
谢谢。
您必须自己在value/value/value
列表和树模型之间进行解析+映射。 但是有一种(棘手的)Qt方法可以做到这一点。
基于QAbstractItemModel
类, Qt Model-View体系结构可以表示许多不同的数据结构。 Qt模型必须实现一些告诉视图的功能:多少列,行,子级等。
列表模型(Qt提供QAbstractListModel
),基本上是一个对视图说的模型:
QModelIndex
表示,根具有无效的父项) 树模型将为每个QModelIndex
返回适当的QModelIndex
。 Qt的抽象模型实际上允许每个子项成为一个表( QModelIndex
始终具有一个父项和一个行列索引)。
长话短说,您必须创建一个代理模型( QAbstractProxyModel
或合适的子类,但是出于您的需要,我认为没有一个)。 该代理将转换QSqlTableModel
发送的数据,在这里您可以告诉视图您实际上有一个树而不是一个列表。
您的根项目是数据库键列表( foo/bar/whatever
第一个元素)中的项目,但是您需要重新分组所有具有相同键的根项目。
AFAIK您只能手动设置。
基本上,因为您如何看待Qt知道如何将数据转换为树模型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.