Добавление QGraphicsItems к QGraphicsItemGroup вызывает сбой - PullRequest
3 голосов
/ 22 ноября 2011

Это мой первый пост.Я недавно начал использовать QT с C ++.Очень впечатлен.У меня есть проблема, с которой я не могу справиться.По сути, я пытаюсь организовать множество QGraphicsItems в два QGraphicsItemGroups.Элементы отображаются с помощью QGraphicsScene на QGraphicsView.Создание предметов и отображение предметов работает как шарм.Однако, когда я добавляю группировку, программа каждый раз вылетает по команде.Причина добавления группировок состоит в том, чтобы позже иметь возможность выбирать, какие элементы отображать в Paintevent.Соответствующий код указан ниже.

QGraphicsScene * scene;
scene = new QGraphicsScene(this);
ui.graphicsView->setScene(scene);

QBrush whiteBrush;
QBrush imageBrush;
QPen blackPen;
whiteBrush = QBrush(Qt::white);
imageBrush = QBrush(Qt::lightGray);
blackPen = QPen(Qt::black);
blackPen.setWidth(1);

QGraphicsItemGroup * cliGroup;
QGraphicsItemGroup * alfGroup;
cliGroup = new QGraphicsItemGroup;
alfGroup = new QGraphicsItemGroup;
scene->addItem(cliGroup);
scene->addItem(alfGroup);

QGraphicsPolygonItem *poly;
poly =  scene->addPolygon(polyF, blackPen, imageBrush);
cliGroup->addToGroup(poly);        //line it crashes on

Я подозреваю, что это как-то связано с созданием полигонов на сцене и последующим добавлением их к QGraphicsItemGroup, хотя я не могу понять, как изменитьэто на работу.С тех пор я прибег к менее элегантному решению, основанному на фильтрации элементов в сцене по типу, но это краткосрочно и грязно.Есть предложения?

Ответы [ 2 ]

1 голос
/ 22 ноября 2011

Из документации QGraphicsItemGroup:

Существует два способа создания группы элементов. Самый простой и распространенный подход - передать список элементов (например, все выбранные элементы) в QGraphicsScene :: createItemGroup (), которая возвращает новый элемент QGraphicsItemGroup. Другой подход заключается в создании вручную QGraphicsItemGroup.item, добавьте его в сцену, вызвав QGraphicsScene :: addItem (), а затем добавьте элементы в группу вручную, по одному, вызвав addToGroup ().

Так что, как предположил Пит, я попробуюследующее:

QList<QGraphicsItem*> groupItems;
groupItems.append(poly); // add more items if you want
// Finally  construct the group
QGraphicsItemGroup * cliGroup = scene->createItemGroup(groupItems); 
0 голосов
/ 22 ноября 2011

Вместо использования new QGraphicsItemGroup используйте QGraphicsScene::createItemGroup.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...