我的问题是关于 Qt 及其QAbstractItemModel。
我有一个字符串和双精度 ( std::map<stringclass, double>
) 的映射,我想在 Qt 小部件中呈现它。虽然我可以为此使用QTableView,但我想利用地图的键是“ abc.def.ghi
”形式的事实,其中可以有多个以“ abc.def
”开头的字符串,甚至更多以“”开头的字符串abc
。
所以我想设置一个树数据模型来呈现QTreeView中的项目,比如
(-) abc
|--(-)def
|--ghi 3.1415
|--jkl 42.0815
|--(+)pqr
|--(+)xyz
my 的键std::map
是树的叶子,所有其他节点都是临时和辅助构造,以支持折叠以方便用户使用。
不幸的是,方法rowCount
、index
、columnCount
和data
有 const 修饰符,所以我不能简单地为我的QAbstractItemModel派生中的标题设置一个辅助数据结构并在那里更改该数据结构。
什么是最好的做法?我应该在我std::map
的和QAbstractItemModel之间设置另一个类层还是有更聪明的方法来做到这一点?
编辑 1:在显示和使用QTreeViewstd::map
时可以更改,因此辅助节点可能会被丢弃并重建。我的假设是处理此问题的最佳方法是重组QAbstractItemModel - 还是我应该简单地丢弃该模型并将新构造的模型分配给QTreeView?在那种情况下,我想我可以在构造函数中设置所有节点,而不会被方法的 const 性所困扰。