私はこれらのクラスを使用しています:
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()て呼び出されます。
QHashuntilcounter=77とを繰り返す必要がありDraw_as_selected()ます。その後、 の最初の要素QListが削除され、2 番目の要素が前面に引き出されます。
この関数は、1 つのオブジェクトが選択されるたびに呼び出されます。インポートされた小さなシーンではすべて問題ありませんが、10MB を超えるファイルを使用している場合、出力の遅延が見られます (巨大なQHash.
これを行うためのより効率的な方法を教えてください。どんな助けでも大歓迎です。
編集:
返信ありがとうございます。問題は、それを取り除くことができないことですQList<int>(iI は、OpenGL 選択スタックの上に整数のみをプッシュできます)。
したがって、上記の解決策の別の方法は、 のQString.toInt()すべての要素に対して実行しQHash、それらを に保存することQList<int>です。
QString事実は...どのようにハッシュを使用して正しいハッシュを見つけますintか?QStringQList