QGraphicsScene没有删除QWidget的功能

时间:2015-05-06 14:37:54

标签: c++ qt qgraphicsview

QGraphicsScene有一个addWidget(QWidget *)函数,但没有相应的removeWidget(QWidget *)。它只有removeItem(QGraphicsItem *)

如何删除QWidget?

2 个答案:

答案 0 :(得分:3)

这是一个基本样本,看看它是否适合你。

QGraphicsScene scene;   
QPushButton *button = new QPushButton; 

//Add item and obtain QGraphicsProxyWidget 
QGraphicsProxyWidget *proxy = scene.addWidget(button);

//Remove item
scene.removeItem(proxy);

请记住删除您分配的所有内存。

编辑:在OP的评论之后,也许这就是你想要的

//add item
QGraphicsProxyWidget *proxy = new QGraphicsProxyWidget;
proxy = scene.addWidget(button);

//remove item
scene.removeItem(button->graphicsProxyWidget());

同样,请记住删除代理,或使用智能指针。

答案 1 :(得分:0)

我找到了一个可行的解决方案,但我确实在控制台中出现了一些警告。这是我正在做的事情的基本近似:

QGraphicsScene *scene = new QGraphicsScene();

// Add button
QPushButton button = new QPushButton( "Test", this );
scene->addWidget( button );

// Remove button
QGraphicsProxyWidget *proxy;
proxy = proxy->createProxyForChildWidget( button );
scene_->removeItem( proxy );
delete proxy;
proxy = NULL;
delete button;
button = NULL;

以下是我看到的警告:

QGraphicsProxyWidget :: setWidget:无法嵌入小部件0x604a2c8,它不是顶级小部件,也不是嵌入式小部件的子节点 QGraphicsProxyWidget :: createProxyForChildWidget:不在QGraphicsScene中的顶级窗口小部件 QGraphicsScene :: removeItem:无法删除0项