LINUX.ORG.RU

Странное поведение QGraphicsItemGroup


0

1

Если мы создадим два QGraphicsItemа родителя и потомка, и обоим включим флаг ItemIsMovable, то потомок будет перемещаться независимо от родителя, а при движении родителя будут двигаться и дочерние итемы. Такое поведение мне и нужно. Но, почему то, когда в роли родителя выступает QGraphicsItemGroup этот фокус не прокатывает. Такое чувство, что QGraphicsItemGroup все дочерние итемы просто добавляет в группу, после чего независимо двигаться они уже не могут. Можно ли это как то обойти?

Пример:

#include <QtGui>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QGraphicsScene scene(0, 0, 500, 500);
    QGraphicsView view(&scene);

    //good
    QGraphicsRectItem itemA(10, 10, 20, 20, NULL, &scene);
    itemA.setFlag(QGraphicsItem::ItemIsMovable);
    QGraphicsRectItem itemB(40, 40, 20, 20, NULL, &scene);
    itemB.setParentItem(&itemA);
    itemB.setFlag(QGraphicsItem::ItemIsMovable);

    //bad
    QGraphicsItemGroup itemC(NULL, &scene);
    itemC.setFlag(QGraphicsItem::ItemIsMovable);
    QGraphicsRectItem itemD(100, 100, 20, 20, NULL, &scene);
    itemC.addToGroup(&itemD);
    QGraphicsRectItem itemE(140, 140, 20, 20, NULL, &scene);
    itemE.setParentItem(&itemC);
    itemE.setFlag(QGraphicsItem::ItemIsMovable);

    view.show();
    return a.exec();
}

★★

Последнее исправление: akinator (всего исправлений: 1)

Судя по доке

A QGraphicsItemGroup is a special type of compound item that treats itself and all its children as one item (i.e., all events and geometries for all children are merged together). It's common to use item groups in presentation tools, when the user wants to group several smaller items into one big item in order to simplify moving and copying of items.

это нормальное поведение. Попробуйте создать фейковый item к которому chilren'ами прицепите нужные вам items.

braboar
()
Ответ на: комментарий от braboar

Попробуйте создать фейковый item к которому chilren'ами прицепите нужные вам items.

Тоже об этом думал, но тогда при перемещении объекта QGraphicsItemGroup остальные итем двигаться не будут.

akinator ★★
() автор топика

Решил проблемму так: для QGraphicsItemGroup завел список зависимых итемов, но не делал их дочерними. И при изменении позиции QGraphicsItemGroup пробегаюсь по списку этих итемов и двигаю их.

akinator ★★
() автор топика
Последнее исправление: akinator (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.