从 QSplitter 中移除 QWidget(使用隐藏与显示,切换十分方便,不要真正销毁)

Posted findumars

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从 QSplitter 中移除 QWidget(使用隐藏与显示,切换十分方便,不要真正销毁)相关的知识,希望对你有一定的参考价值。

 

Splitter 的函数中有addWidget,但是却没有removeWidget, 或者delete之类的功能,所以如果想删去或者暂时不显示其中的某些widget就要自己手动完成这个效果。
方法一:
取出想删除的widget,删除它的指针,QSplitter找不到这个widget的地址,就会自动清除这个widget。
QWidget *w = new QWidget();
splitter->addWidget(w);
QWidget *a = splitter->widget(0);
delete a;
a = NULL;
但是这个方法存在一个问题,删除指针a,意味着w所指向的地址也被删除了,如果你想再次把w add到splitter中,就会出现内存访问冲突之类的错误,因为w所指向的widget已经被delete掉了。
这个方法的好处是真正把一个widget从 splitter里面移除了,而且连带原本的widget也释放了。

方法二:
QWidget中有一个函数.hide();它相当于把一个widget设为不可见setVisible(false);想要恢复它也很容易,setVisible(true)即可。
QWidget *w = new QWidget();
splitter->addWidget(w);
QWidget *a = splitter->widget(0);
a.hide();
这样就可以达到看上去像删除了splitter中一个widget的效果。但其实这个widget还在splitter中。如果想让它再出现,就设置a.setVisible(true);
此方法不会释放w,因而适合反复调整splitter中可见widget的功能。

 

http://www.cppblog.com/wicbnu/archive/2012/02/10/165273.html

 

以上是关于从 QSplitter 中移除 QWidget(使用隐藏与显示,切换十分方便,不要真正销毁)的主要内容,如果未能解决你的问题,请参考以下文章

从 XML Schema 中移除命名空间支持

在 QSplitter 中带有 QWidget 的 QScrollArea

PyQt5 学习记录010:QSplitter

从 fetchedResultsController fetchedObjects 中移除一个对象

如何从JavaScript对象中移除一个属性

如何从 UITextField 中移除焦点?