【发布时间】:2013-06-13 00:53:31
【问题描述】:
我正在使用这些类:
QHash: 表示场景的所有对象(不能修改这个类)
QList: 显示所有选中的对象。它包含ID(另存为int)
//DrawSelectedObjects(){
QHash<QString, SceneObject*>& hash=sc->getObj();
QList<int> tempList = HitsList;
int counter =0;
for (QHash<QString,SceneObject*>::ConstIterator i = hash.begin();i!=hash.end();++i) {
if (tempList.startsWith(counter)) {
.
Draw_as_selected()
.
tempList.removeOne(counter);
}
}
}
因此,例如,如果我选择对象 #77,则其 ID 保存在 Hitslist (QList) 中。
之后,HitsList 被排序,DrawSelectedObjects() 被调用。
它必须迭代 QHash 直到 counter=77 和 Draw_as_selected()。之后,QList 的第一个元素被移除,将第二个元素拉到前面。
每次选择一个对象时都会调用此函数。导入的小场景一切正常,但是当我使用大于 10MB 的文件时,我可以看到一些输出延迟(这很明显,因为我正在迭代一个巨大的 QHash)。
您能建议我一种更有效的方法吗?任何帮助将不胜感激。
编辑:
感谢您的回复。问题是我无法摆脱 QList<int>(我只能将整数推送到 OpenGL 选择堆栈的顶部)。
因此,上述解决方案的另一种方法是为QHash 的每个元素执行QString.toInt() 并将它们保存到QList<int>。
事实是...如何使用QList 上的int(现在通过从QString 转换计算,不再来自计数器)在哈希上找出正确的QString?
【问题讨论】:
标签: c++ performance qt qlist qhash