을 충돌합니다. 버튼을 삭제하고 싶지만 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()"를 작성한 후 프로그램이 중단되므로 삭제 된 객체를 호출하려고하는 (내 클래스 이상에서) 메소드가 있어야합니다.