3 votes

L'ajout de QGraphicsItems à QGraphicsItemGroup provoque un crash

C'est mon premier message. J'ai récemment commencé à utiliser QT avec C++. Je suis très impressionné. J'ai un problème que je ne parviens pas à résoudre. En gros, j'essaie d'organiser de nombreuses QGraphicsItems en deux QGraphicsItemGroups . Les éléments sont affichés à l'aide d'un QGraphicsScene sur un QGraphicsView . La création des éléments et l'affichage des éléments fonctionnent comme sur des roulettes. Cependant, lorsque j'ajoute le regroupement, le programme se bloque à chaque fois à la commande. La raison de l'ajout des groupements est de pouvoir choisir plus tard les éléments à rendre dans l'événement de peinture. Le code correspondant est indiqué ci-dessous.

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

Je soupçonne que cela a quelque chose à voir avec la création des polygones dans la scène, puis avec leur ajout dans le fichier d'image. QGraphicsItemGroup mais je n'arrive pas à trouver comment le modifier pour qu'il fonctionne. J'ai depuis recouru à une solution moins élégante basée sur le filtrage des éléments de la scène en fonction de leur type, mais cette solution est à court terme et désordonnée. Avez-vous des suggestions ?

1voto

pnezis Points 6971

De la QGraphicsItemGroup documentation :

Il y a deux façons de construire un groupe d'éléments. Le plus simple et le plus l'approche la plus simple et la plus courante est de passer une liste d'éléments (par exemple, tous les éléments sélectionnés) à QGraphicsScene::createItemGroup(), qui renvoie un nouvel élément de type QGraphicsItemGroup item. L'autre approche consiste à construire manuellement un QGraphicsItemGroup, l'ajouter à la scène en appelant QGraphicsScene::addItem(), et ensuite ajouter manuellement des éléments au groupe, un par un, en appelant addToGroup().

Donc, comme Pete l'a suggéré, j'essaierais ce qui suit :

QList<QGraphicsItem*> groupItems;
groupItems.append(poly); // add more items if you want
// Finally  construct the group
QGraphicsItemGroup * cliGroup = scene->createItemGroup(groupItems);

0voto

Pete Points 3137

Plutôt que d'utiliser new QGraphicsItemGroup utiliser QGraphicsScene::createItemGroup .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X