QGraphicsScene 没有移除 QWidget 的功能
QGraphicsScene does not have a function to remove QWidget
QGraphicsScene 有一个addWidget(QWidget *)
函数,但没有相应的removeWidget(QWidget *)
。它只有 removeItem(QGraphicsItem *)
。
如何删除 QWidget?
我找到了可行的解决方案,但控制台中确实出现了一些警告。这是我正在做的事情的基本近似值:
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 项
这是一个基本示例,看看它是否适合您。
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());
再次提醒,记得删除代理,或者使用智能指针。
QGraphicsScene 有一个addWidget(QWidget *)
函数,但没有相应的removeWidget(QWidget *)
。它只有 removeItem(QGraphicsItem *)
。
如何删除 QWidget?
我找到了可行的解决方案,但控制台中确实出现了一些警告。这是我正在做的事情的基本近似值:
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 项
这是一个基本示例,看看它是否适合您。
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());
再次提醒,记得删除代理,或者使用智能指针。