QGraphicsScene具有addWidget(QWidget *)
功能,但沒有對應removeWidget(QWidget *)
。它只有removeItem(QGraphicsItem *)
。QGraphicsScene不具有刪除QWidget的功能
如何刪除QWidget?
QGraphicsScene具有addWidget(QWidget *)
功能,但沒有對應removeWidget(QWidget *)
。它只有removeItem(QGraphicsItem *)
。QGraphicsScene不具有刪除QWidget的功能
如何刪除QWidget?
這裏有一個基本的樣本,看看它是否適合你。
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 *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項
謝謝Maxito。我注意到scene.addWidget返回一個代理小部件指針,並且指出你提供的是做這件事的預期方法。這就是我在我的方法中首先使用代理的原因。在我的實際用例中,小部件指針是一個類成員。我不想創建另一個類成員通過代理指向它,因此我使用createProxy函數來避免這種情況。 – BuvinJ
任何想法是什麼關於頂級小部件的警告? – BuvinJ
我真的不明白你在這裏做什麼_proxy = proxy-> createProxyForChildWidget(button); _ _button_不是_proxy_中包含的小部件的子元素,_proxy_甚至沒有初始化,它不會使感覺到我。 – Maxito