我有一个QGraphicsScene和按钮。我想删除那些按钮,但方法clear()不起作用。
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()";
如果我用“delete graphicItem”注释行,它不会崩溃,但是项目不会从场景中删除,因为当我尝试读取它们时,我得到:
QGraphicsProxyWidget::setWidget: cannot embed widget 0×5f547d8; already embedded
QGraphicsProxyWidget::setWidget: cannot embed widget 0×5f6a818; already embedded”
我删除的项目没有父项。 有趣的是,程序在写完“hideButtons()的结尾”后崩溃,因此必须有一些方法(从我的类之外)尝试调用已删除的对象。
答案 0 :(得分:0)
我解决了这个问题,没有删除按钮。我重写了我的程序,所以我只隐藏并显示按钮。它工作正常。
经过一些反思:我认为更好的解决方案是将graphicsView设置为按钮的父级,而不是将该按钮作为小部件添加到场景中。第一种解决方案允许您更简单地更改该按钮。