QAbstractListModel和QListView最合适的Qt容器是什么

时间:2015-12-13 06:46:13

标签: c++ qt qt4

我通过继承QAbstractListModel并使用QVector作为内部容器创建了一个QListView模型。我的模型只允许将文本附加到列表的后面,并且只允许从前面删除项目。擦除操作是批处理的(即每次列表变得太大时我从前面擦除大约10%的项目。)

最好使用的容器是什么?

目前我正在使用QVector,因为我认为在这种情况下,与QList相比,性能(连续的内存布局)会更好。但我不确定Qt如何在内部访问容器以及连续容器是否有任何区别。

1 个答案:

答案 0 :(得分:2)

在大多数QAbstractItemModel子类中,最重要的优化方法通常是data()(和index(),但这很少有问题):它将被称为无数次,特别是当顶层视图启用了排序时。因此,从容器中复制大块数据或进行非恒定时间查找,例如在地图中是一个坏主意。 QVector / std :: vector是一个很好的标准选择。

因此,您可以了解项目模型方法中的哪些方法是一个很好的练习,并且可以添加一些计数器并查看。

除了快速查找之外,我认为选择主要取决于您的代码如何修改容器,这与在QAbstractItemModel中使用它无关。 Qt没有“内部访问容器”,所有访问都是由你实现的,因为你实现了data(),rowCount()等。另外,在某些时候优化容器更多也将变得毫无意义,因为视图,而不是模式,将成为瓶颈。