背景
最近在为自己写的文件管理器做文件搜索功能,搜索过程中将搜索到的文件放入列表框中。考虑到搜索文件比较多没有使用QListWidget而是使用使用QListView,Model使用QStringListMode。
问题
搜到文件不多时大概几十个时显示速度很快,当搜索整个磁盘时这是有几百万个文件时,显示速度的特别慢,鼠标一直在转圈。QListView显示也就几十行,不应该很慢。
解决
经过调试发现QListView有一个属性uniformItemSizes的默认值是false,导致QListView内部对所有的项计算一遍,200多万条数据就需要计算200多万次,速度当然很慢了。将属性uniformItemSizes设置为true后,QListView只计算可显示的几十行,速度很快,达到设计要求。