2015-04-08 2 views
1

У меня есть много qgraphicsitem, которые являются путевыми точками на карте. И я хотел бы переместить их вместе. Таким образом, я использовал цикл for для вызова их функции setPos(). Но когда количество предметов становится большим (более 100). Перемещение становится медленным ... Как я могу сделать это более эффективно?Как эффективно перемещать большое количество qgraphicsitem?

+0

Вы вызываете 'setPos()' для каждого пикселя во время перемещения? – vahancho

+0

Я вызывал setPos для каждого QGraphicsItem во время перемещения. – Nyaruko

+0

Вы можете вызвать setPos() только для последней позиции, когда переход сделан. Например, если вы перемещаете элементы из точки A в B, вызовите setPos() только для точки B, а не для каждой точки между A и B. – vahancho

ответ

3

Если вы перемещаете их на одну и ту же сумму, вы можете использовать QGraphicsItemGroup для группировки всех ваших пунктов путевой точки; то вы можете просто переместить группу элементов, чтобы автоматически перемещать все элементы в этой группе.

+0

Это быстрее? – Nyaruko

+1

Не помешало бы попробовать - если ничего другого, это, конечно, не будет медленнее, и это поможет упростить ваш код. –

+0

@Nyaruko Да, это должно быть значительно быстрее, так как каждый вызов 'setPos (..)' ранее запускал обновление для сценграфа (и, возможно, событие рисования, хотя для этого могут быть и оптимизации). Перенос одного родительского элемента приведет к одной оценке сценграфа. – cmannett85