2008-12-16 459 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); 
}