QGraphicsScene 没有移除 QWidget 的功能

Posted

技术标签:

【中文标题】QGraphicsScene 没有移除 QWidget 的功能【英文标题】:QGraphicsScene does not have a function to remove QWidget 【发布时间】:2015-05-06 14:37:53 【问题描述】:

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

如何删除 QWidget?

【问题讨论】:

【参考方案1】:

这是一个基本示例,看看它是否适合您。

QGraphicsScene scene;   
QPushButton *button = new QPushButton; 

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

//Remove item
scene.removeItem(proxy);

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

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

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

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

再次提醒,请记住删除代理,或使用智能指针。

【讨论】:

谢谢,马克西托。我确实注意到 scene.addWidget 返回了一个代理小部件指针,并认为您提供的是执行此操作的预期方法。这就是我开始在我的方法中使用代理的方式。在我的实际用例中,小部件指针是一个类成员。我不想创建另一个类成员通过代理指向它,因此我使用 createProxy 函数来避免这种情况。 知道关于***小部件的警告是什么吗? 我不太明白你在这里要做什么 proxy = proxy->createProxyForChildWidget( button ); button 不是proxy 中包含的小部件的子级,proxy 甚至没有初始化,这对我来说没有意义。 我只是想从 QWidget 指针中获取 QGraphicsProxyWidget 指针。我不知道怎么做。该功能确实提供了这一点。有没有更好的办法? 如果我理解,那么您不想创建一个 QGraphicsProxyWidget 作为类成员吗?如果是这样,也许您仍然可以在初始化中创建代理并分配它,然后在需要时使用QWidget::graphicsProxyWidget() 访问它【参考方案2】:

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

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-item

【讨论】:

以上是关于QGraphicsScene 没有移除 QWidget 的功能的主要内容,如果未能解决你的问题,请参考以下文章

Qt:QGraphicsScene 在我期望的时候没有更新

尝试在 QGraphicsScene 和 QGraphicsView 中显示 opencv 视频,但没有显示

手动调整窗口大小后,QGraphicsScene 宽度/高度没有变化

QGraphicsScene 中的位移

在 QGraphicsScene 中缩放和旋转的 QGraphicsPixmapItem 的奇怪绘图行为

将 QWidget 添加到 QGraphicsScene