【发布时间】:2010-02-01 10:42:19
【问题描述】:
我的问题是关于 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
我的std::map 的键是树的叶子,所有其他节点都是临时和辅助构造,以支持折叠以方便用户使用。
不幸的是,rowCount、index、columnCount 和 data 方法具有 const 修饰符,所以我不能简单地为我的 QAbstractItemModel 中的标题设置辅助数据结构派生并更改该数据结构。
最好的做法是什么?我应该在std::map 和QAbstractItemModel 之间设置另一个类层还是有更聪明的方法来做到这一点?
编辑 1:std::map 可以在显示和使用 QTreeView 时更改,因此辅助节点可能会被丢弃并重建。我的假设是处理这个问题的最好方法是重组QAbstractItemModel - 或者我应该简单地丢弃那个模型并将一个新构建的模型分配给QTreeView?在这种情况下,我想我可以在构造函数中设置所有节点,而不会被方法的 const 性所困扰。
【问题讨论】:
标签: c++ qt qtreeview qabstractitemmodel qtgui