2015-05-06 65 views

回答

2

這裏有一個基本的樣本,看看它是否適合你。

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()); 

什麼再次,記得刪除代理,或者使用智能指針。

+0

謝謝Maxito。我注意到scene.addWidget返回一個代理小部件指針,並且指出你提供的是做這件事的預期方法。這就是我在我的方法中首先使用代理的原因。在我的實際用例中,小部件指針是一個類成員。我不想創建另一個類成員通過代理指向它,因此我使用createProxy函數來避免這種情況。 – BuvinJ

+0

任何想法是什麼關於頂級小部件的警告? – BuvinJ

+0

我真的不明白你在這裏做什麼_proxy = proxy-> createProxyForChildWidget(button); _ _button_不是_proxy_中包含的小部件的子元素,_proxy_甚至沒有初始化,它不會使感覺到我。 – Maxito

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項