在Qt中,我有一个sqlite数据库,我正在拉入它。其中一个表(configTable)附加了QSqlTableModel
。
该表有一个简单的两列键/值结构。键是具有类似文件夹的值的字符串,例如"general/name“、"general/version”、"foo/bar/baz“等。值只是任意变体。
我希望用更易于浏览的QTreeView
而不是QTableView
来显示这些数据,因为我的键结构非常适合这样做。
在我重新实现类和各种疯狂的事情之前,有没有一个优雅的解决方案?如果我重新实现或扩展类,我应该看哪一个?
谢谢。
发布于 2017-12-13 17:18:24
您必须自己在value/value/value
列表和树模型之间执行parsing+mapping。但是有一个(棘手的) Qt方法可以做到这一点。
基于QAbstractItemModel
类,Qt Model-View architecture可以表示许多不同的数据结构。Qt模型必须实现一些函数来告诉视图:有多少列、行、子级等。
列表模型(Qt提供了QAbstractListModel
),基本上是一个模型,它对视图说:
QModelIndex
表示,根目录具有无效的父项)相同
树模型将为每个QModelIndex
返回适当的子项。Qt的抽象模型实际上允许每个子项都是一个表(QModelIndex
总是有一个父,有一个行-列索引)。
长话短说,您必须创建一个代理模型(QAbstractProxyModel
或一个合适的子类,但对于您的需要,我不认为有一个)。这个代理将转换您的QSqlTableModel
发送的数据,在这里您可以告诉视图,您实际上有一个树,而不是一个列表。
根项目是数据库键列表(foo/bar/whatever
的第一个元素)中的项目,但是需要对具有相同键的所有根项目进行重新分组。
发布于 2015-08-26 09:26:59
AFAIK您只能手动创建它。
基本上,因为您认为Qt如何知道如何将数据转换为树模型。
https://stackoverflow.com/questions/32208572
复制相似问题