这是我的第一篇文章。我最近开始在Q ++中使用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
有关,虽然我无法弄清楚如何改变它的工作原理。我已经采用了一种不太优雅的解决方案,基于类型过滤场景中的项目,但这是短期和混乱的。有什么建议吗?
答案 0 :(得分:1)
来自QGraphicsItemGroup
文档:
构建项目组有两种方法。 最简单,最容易 通用方法是传递项目列表(例如,所有选定项目) 到QGraphicsScene :: createItemGroup(),它返回一个新的 QGraphicsItemGroup项。另一种方法是手动构造一个 QGraphicsItemGroup项,将其添加到场景调用中 QGraphicsScene :: addItem(),然后手动将项添加到组中, 通过调用addToGroup()一次一个。
因为Pete建议我尝试以下方法:
QList<QGraphicsItem*> groupItems;
groupItems.append(poly); // add more items if you want
// Finally construct the group
QGraphicsItemGroup * cliGroup = scene->createItemGroup(groupItems);
答案 1 :(得分:0)
使用new QGraphicsItemGroup
。
QGraphicsScene::createItemGroup