在我的项目中,我有一个递归迭代QTreeView模型的函数。在某些情况下,我将值附加到存储在每个项的Qt::UserRole中的QStringList。
问题是..。递归扫描做了大量的检查,从JSON文件读取,从磁盘导入图标等等,然而,所有这些都比简单地将1或2个字符串附加到模型中约5%的项目的QStringList快很多。
我做了一些基本的分析,发现如果我注释掉所有对QStringList::append()的调用,而把所有疯狂的JSON读取、图标设置、颜色更改等都留在里面,速度会比我把它们留在里面的速度快3倍。而且它明显慢了很多。慢得令人沮丧。
因此,我决定将范围缩小到只对大约5%的项目进行一次QStringList::append()调用。以下是代码示例:
QStringList rightClickList = mainItem->data(Qt::UserRole+8).toStringList();
rightClickList.append("customName");//comment this out and it runs 3x faster
//than allllll the recursive scanning combined!
mainItem->setData(rightClickList, Qt::UserRole+8);我估计在一个给定的模型中,大约有5%的项目有任何QStringList的变化。剩下的就没人管了。QStringList类型真的那么慢吗?如果是这样,你会推荐什么替代方案?
耽误您时间,实在对不起!
发布于 2017-04-08 09:46:17
https://stackoverflow.com/questions/43289228
复制相似问题