2011-11-22 139 views
3

這是我的第一篇文章。我最近開始在C++中使用QT。非常感動。我有一個問題,我似乎無法得到處理。基本上,我試圖將許多QGraphicsItems組織成兩個QGraphicsItemGroups。這些項目使用QGraphicsSceneQGraphicsView上顯示。創建項目和顯示項目就像一個魅力。但是,當我添加分組時,程序每次都會在命令上崩潰。添加分組的原因是稍後能夠選擇在paintevent中呈現哪些項目。下面列出了相關的代碼。追加QGraphicsItems到QGraphicsItemGroup導致崩潰

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()手動向該組添加項目, 。

所以皮特建議我會嘗試以下方法:

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

而不是使用new QGraphicsItemGroup,請使用QGraphicsScene::createItemGroup