在我的项目中,我有一个递归迭代QTreeView
模型的函数。在某些时候,我会将值附加到存储在每个项目QStringList
中的Qt::UserRole
。
这就是问题......递归扫描会进行大量检查,从JSON文件读取,从磁盘导入图标等等。然而,所有这些都比仅仅添加1或2个字符串要快几英里。约为模型中5%项目的QStringList
。
我做了一些基本的分析,发现如果我注释掉所有对QStringList::append()
的调用,但是在所有疯狂的JSON读取,图标设置,颜色变化等等,它比我离开它们快3倍它明显变慢了......令人沮丧地慢了。
所以我决定将其范围缩小到仅约1%对{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
类型真的那么慢吗?如果是这样,你会推荐什么选择?
谢谢你的时间!
答案 0 :(得分:0)