0

私はこれらのクラスを使用しています:

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

4

1 に答える 1

2

ハッシュ内のオブジェクトにアクセスする方法がQString(ID ではなくオブジェクトの「名前」だと思います) を使用している場合はQString、選択したオブジェクトを保存するためにリストも使用する必要があります。

QHash<QString, SceneObject*> & hash = getAllObjects();
QList<QString> & tempList = getSelectedObjects();

foreach(QString name, tempList)
    hash[name]->drawAsSelected(); // or drawAsSelected(hash[name]) depending on your design
于 2013-06-13T02:33:01.393 に答える