2008-12-16 137 views

回答

10

Qt中的許多事情不能被「傳統」去除。而是調用hide()並將其破壞。從QSplitter文檔:

當您隱藏()一個孩子的空間將 其他 孩子之間進行分配。當你再次顯示()時,它將被恢復。

1

我喜歡Tuminoid的答案。但是,如果您絕對需要刪除它,請嘗試獲取要刪除的小部件,然後在該小部件上調用setParent(NULL)。這是我最好的猜測。

19

,如果你想保留的小部件,並把它在其他地方目前還不清楚我的,或者如果你想摧毀該Widget。

  • 銷燬小部件:如果你能 獲得一個指向小部件,你可以簡單地 刪除它。拆分器將 安全地通知其子 被刪除,並將從其自身刪除 。

  • 保留部件:如果你搶 指針到小部件,您可以 簡單地設置其母公司其他一些 部件並將其添加到另一個 小部件的佈局,它會顯示 那裏。這是安全的,因爲QSplitter將被通知一個 其子女正在重新設置。

如果要設置父爲NULL(cjhuitt的答案),要知道,你現在負責清理內存,因爲小部件不再有父。

+2

注意,當你設置父爲NULL窗口小部件成爲主窗口...(除非你先隱藏起來。) – 2012-01-22 08:27:57

0

如果你持有一個指針部件,那麼就刪除它,或者使用deleteLater()如果你想成爲安全起見。

如果你沒有小部件指針,使用了QSplitter ::小部件(INT指數)的功能。然後,您可以使用它的deleteLater()插槽。

如果你沒有小部件指數,但你還是知道小部件的objectName(),然後的QObject :: findChild()是讓小部件指針的唯一途徑。

0

另一種簡單的方法來防止孩子從窗口小部件入門刪除是使用QSplitter.takeWidget(孩子)。這也是從拆分器中刪除小部件的推薦方式。 (Qt Documentation)

+2

提供一個文檔鏈接takeWidget。 – W55tKQbuRu28Q4xv 2010-11-02 06:48:17

0

我遇到了同樣的問題。在Qt 4.8中暫時隱藏QSplitter的一個小部件,我只是隱藏它。然而這還不夠,因爲分離手柄仍然可以移動。但是手柄可以訪問和隱藏,以及:

frameA->setVisible(conditionA); 
frameB->setVisible(conditionB); 
if (!(conditionA && conditionB)) // if only 1 frame is visible 
{ 
    splitter->handle(0)->setVisible(false); 
}