我有一个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类)。
EDIT: 好吧,我在代码中犯了一些错误,所以我现在知道为什么它没有工作,但现在每次我尝试使用清除场景时它都会崩溃。
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 "注释一行,它不会崩溃,但项目没有从场景中删除,因为当我试图读取它们时,我得到的是:"我删除的项目,没有父级。"有趣的是,程序在写完 "End hideButtons("后崩溃,所以一定有一些方法(在我的类之外)试图调用。
QGraphicsProxyWidget::setWidget: cannot embed widget 0×5f547d8; already embedded
QGraphicsProxyWidget::setWidget: cannot embed widget 0×5f6a818; already embedded”
有趣的是,程序在写完 "End of hideButtons() "之后就崩溃了,所以一定有一些方法(来自我的类之外)试图调用被删除的对象。
我解决了这个问题,通过不删除按钮。我重写了我的程序,所以我只隐藏和显示按钮。而且它工作得很好。
经过反思,我觉得更好的解决办法是在程序中设置一个隐藏按钮,而不是显示按钮。我认为更好的解决方案是将图形视图设置为按钮的父级,而不是将按钮作为一个小部件添加到场景中。第一种解决方案可以让你更简单地对该按钮进行修改。