2014-05-09 2 views
0

을 충돌합니다. 버튼을 삭제하고 싶지만 clear() 메소드가 작동하지 않습니다.QGraphicsScene - 삭제 항목 - 클리어() 나는 그에게 QGraphicsScene 및 버튼이

mainclass.cpp

MainClass::MainClass(QWidget* parent) 
    :QMainWindow(parent) 
{ 
    ui.setupUi(this); 
    scene = new QGraphicsScene(this); 
    ui.graphicsView->setScene(scene); 
    QPixMap picture(":/MainClass/Resources/picture.jpg"); 
    pixmapItem = scene->addPixmap(picture); 
    pixmapItem->setFlag(QGraphicsItem::ItemIsMovable); 
} 

void MainClass::hideButtons(); 
{ 
    scene->clear(); 
} 

어쩌면 다른이 할 수있는 방법이 있나요?

기능 hideButtons은 (클래스 MainClass에서) 다른 함수가 호출된다.

편집 : 좋아, 내가 코드에서 몇 가지 실수를했다, 그래서 그것은 작동하지 않았다 왜 지금 알고 있지만, 지금은 내가 사용 장면을 삭제하려고 할 때마다 충돌 : 동일

scene->clear() 

등을

QList<QGraphicsItem*> allGraphicsItems = scene->items(); 
for(int i = 0; i < allGraphicsItems.size(); i++) 
{ 
    QGraphicsItem *graphicItem = allGraphicsItems[i]; 
    scene->removeItem(graphicItem); 
    delete graphicItem; 
    scene->update(); 
} 
qDebug()<<"End of hideButtons()"; 

내가 함께 라인을 코멘트 경우는 충돌하지 않는다 "graphicItem 삭제"하지만 내가 그들을 다시 추가하려고 할 때, 내가 도착하기 때문에 항목은 현장에서 삭제되지 않습니다

QGraphicsProxyWidget::setWidget: cannot embed widget 0×5f547d8; already embedded 
QGraphicsProxyWidget::setWidget: cannot embed widget 0×5f6a818; already embedded” 

제거한 항목에는 부모가 없습니다. 흥미롭게도, "End of hideButtons()"를 작성한 후 프로그램이 중단되므로 삭제 된 객체를 호출하려고하는 (내 클래스 이상에서) 메소드가 있어야합니다.

답변

0

버튼을 삭제하지 않아도 문제가 해결되었습니다. 프로그램을 다시 작성 했으므로 버튼 만 숨기고 표시합니다. 그리고 그것은 잘 작동합니다. 일부 반사 후

: 나는 더 나은 솔루션 위젯으로 장면에 그 버튼을 추가하는 것보다 버튼의 부모로서 graphicsView을 설정하는 것입니다 생각합니다. 첫 번째 솔루션을 사용하면 해당 버튼을 더 간단하게 변경할 수 있습니다.