У меня есть много qgraphicsitem, которые являются путевыми точками на карте. И я хотел бы переместить их вместе. Таким образом, я использовал цикл for для вызова их функции setPos()
. Но когда количество предметов становится большим (более 100). Перемещение становится медленным ... Как я могу сделать это более эффективно?Как эффективно перемещать большое количество qgraphicsitem?
ответ
Если вы перемещаете их на одну и ту же сумму, вы можете использовать QGraphicsItemGroup
для группировки всех ваших пунктов путевой точки; то вы можете просто переместить группу элементов, чтобы автоматически перемещать все элементы в этой группе.
Это быстрее? – Nyaruko
Не помешало бы попробовать - если ничего другого, это, конечно, не будет медленнее, и это поможет упростить ваш код. –
@Nyaruko Да, это должно быть значительно быстрее, так как каждый вызов 'setPos (..)' ранее запускал обновление для сценграфа (и, возможно, событие рисования, хотя для этого могут быть и оптимизации). Перенос одного родительского элемента приведет к одной оценке сценграфа. – cmannett85
Вы вызываете 'setPos()' для каждого пикселя во время перемещения? – vahancho
Я вызывал setPos для каждого QGraphicsItem во время перемещения. – Nyaruko
Вы можете вызвать setPos() только для последней позиции, когда переход сделан. Например, если вы перемещаете элементы из точки A в B, вызовите setPos() только для точки B, а не для каждой точки между A и B. – vahancho