什么是最适合QAbstractListModel和QListView的Qt容器
What is the most appropriate Qt container for QAbstractListModel and QListView
我从QAbstractListModel继承并使用QVector作为内部容器,创建了一个QListView模型。我的模型只允许将文本附加到列表的后面,也只允许从前面删除项目。擦除操作是分批的(即,每次列表太大时,我都会从前面擦除大约10%的项目)。
什么是最好的容器?
目前我正在使用QVector,因为我希望在这种情况下,与QList之类的东西相比,性能(连续内存布局)会更好。然而,我不确定Qt是如何在内部访问容器的,也不确定容器是否是连续的。
在大多数QAbstractItemModel子类中,最重要的优化方法通常是data()(和index(),但这很少是问题):它会被调用无数次,尤其是当顶部的视图启用排序时。因此,从容器中复制大块数据或进行非恒定时间查找(例如在映射中)是个坏主意。QVector/std::vector是一个很好的标准选择。
因此,了解哪种项目模型方法被称为多久一次是一项很好的练习,可以添加一些计数器并查看。
除了快速查找之外,我认为选择主要取决于您的代码如何修改容器,这与QAbstractItemModel中使用的容器无关。Qt不"内部访问容器",所有访问都是由您实现的,因为您实现了data()、rowCount()等。此外,在某个时候,对容器进行更多优化也将变得毫无意义,因为视图而不是模型将成为瓶颈。
相关文章:
- Qt VTK交互风格的信号到小部件
- QT在错误的班级中寻找空位
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 如何在Qt窗口小部件中使用QStringView(或QStringRef)
- 如何在Qt C++中更改光标
- 如何在MS Visual Studio 2019中运行QT UI
- QT通过C++添加映射QML项目
- Qt:当QListView获得新条目时,如何更新QStringList
- QT - QListView - 当前选择/当前已更改 未发出
- 信号和插槽的连接(有关QListView)-QT
- Qt,QListView Model
- Qt-检测QListView中的项目信息更改
- Qt对QListView和QTableView使用相同的模型
- 什么是最适合QAbstractListModel和QListView的Qt容器
- Qt:链接我的模型数据与QListView
- QListView或QListWidget中的Qt c++字体列表,并将它们表示为复选框
- QT 5.3 QListView column problems
- QListView显示空白行??(Qt)
- 使用Qt动画框架自定义委托在QListView
- Mac OS X上的Qt:如何摆脱QListView的蓝色轮廓?