QSplitter 的函數(shù)中有addWidget,但是卻沒有removeWidget, 或者delete之類的功能,所以如果想刪去或者暫時(shí)不顯示其中的某些widget就要自己手動(dòng)完成這個(gè)效果。
方法一:
取出想刪除的widget,刪除它的指針,QSplitter找不到這個(gè)widget的地址,就會(huì)自動(dòng)清除這個(gè)widget。
QWidget *w = new QWidget();
splitter->addWidget(w);
QWidget *a = splitter->widget(0);
delete a;
a = NULL;
但是這個(gè)方法存在一個(gè)問題,刪除指針a,意味著w所指向的地址也被刪除了,如果你想再次把w add到splitter中,就會(huì)出現(xiàn)內(nèi)存訪問沖突之類的錯(cuò)誤,因?yàn)閣所指向的widget已經(jīng)被delete掉了。
這個(gè)方法的好處是真正把一個(gè)widget從 splitter里面移除了,而且連帶原本的widget也釋放了。
方法二:
QWidget中有一個(gè)函數(shù).hide();它相當(dāng)于把一個(gè)widget設(shè)為不可見setVisible(false);想要恢復(fù)它也很容易,setVisible(true)即可。
QWidget *w = new QWidget();
splitter->addWidget(w);
QWidget *a = splitter->widget(0);
a.hide();
這樣就可以達(dá)到看上去像刪除了splitter中一個(gè)widget的效果。但其實(shí)這個(gè)widget還在splitter中。如果想讓它再出現(xiàn),就設(shè)置a.setVisible(true);
此方法不會(huì)釋放w,因而適合反復(fù)調(diào)整splitter中可見widget的功能。