Я использую эти классы:
QHash
: представление всех объектов сцены (невозможно изменить этот класс)
QList
: отображение всех выбранных объектов. Он содержит идентификаторы (сохраненные как 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, его идентификатор сохраняется в Hitslist
(QList
).
После этого сортируется HitsList
и вызывается DrawSelectedObjects()
.
Он должен повторять QHash
до counter=77
и Draw_as_selected()
. После этого снимается первый элемент QList
, вытягивая вперед второй.
Эта функция вызывается КАЖДЫЙ раз при выборе одного объекта. С небольшими импортированными сценами все в порядке, но когда я использую файлы> 10 МБ, я вижу некоторую задержку вывода (это очевидно, потому что я повторяю огромный QHash
).
Не могли бы вы предложить мне более эффективный способ сделать это? Любая помощь будет оценена по достоинству.
РЕДАКТИРОВАТЬ:
Спасибо за ваш ответ. Проблема в том, что я не могу избавиться от этого QList<int>
(я могу поместить только целые числа поверх стека выбора OpenGL).
Итак, еще один способ из приведенного выше решения - сделать QString.toInt()
для каждого элемента QHash
и сохранить их в QList<int>
.
Дело в том... как узнать правильное QString
в хэше, используя int
(рассчитывается теперь путем преобразования из QString
, а не больше из счетчика) в QList
?