从 QSplitter 中删除小部件
Posted
技术标签:
【中文标题】从 QSplitter 中删除小部件【英文标题】:Remove Widget from QSplitter 【发布时间】:2013-12-02 12:31:14 【问题描述】:很久以前,有人问过同样的问题。 How to remove...
这就是答案:
当你 hide() 一个孩子时,它的空间将分配给其他孩子。当您再次显示()时,它将恢复。
我已经尝试过QSplitter::hide()
、show()
、update()
函数以及delete
。
没有任何效果。
//class.cpp
void PlainView::addComponent(QWidget *widget)
qDebug() << _splitOne->widget(1);
//delete current widget on index 1
delete _splitOne->widget(1);
//add new widget on index 1
_splitOne->addWidget(widget);
qDebug() << _splitOne->widget(1);
//output
QObject(0x0)
QTextEdit(0xa0f580
第一个小部件被删除并添加了新小部件。但是我看不到新的小部件。
有人有想法吗?
【问题讨论】:
【参考方案1】:不要使用删除,而是使用deleteLater()
,您需要先删除旧的小部件:
void PlainView::addComponent(QWidget *widget)
qDebug() << _splitOne->widget(1);
QWidget *old = _splitOne->widget(1);
// deparenting removes the widget from the gui
old->setParent(0);
//delete current widget on index 1
old->deleteLater()
//add new widget on index 1
_splitOne->insertWidget(1,widget);
widget->show();
qDebug() << _splitOne->widget(1);
【讨论】:
我已经测试了你的代码,但我得到了以下异常:QObject(0x0) The program has unexpectedly finished.
我的编译器不支持auto
消息:warning: 'auto' changes meaning in C++11; please remove it [-Wc++0x-compat]
这行惹麻烦setParent(NULL);
old->setParent(0) 抛出同样的异常The program has unexpectedly finished
,对不起;(以上是关于从 QSplitter 中删除小部件的主要内容,如果未能解决你的问题,请参考以下文章
在 QSplitter 中带有 QWidget 的 QScrollArea