在我的应用程序中有一个由 QSplitter 分割的窗口,我需要删除一个小部件。

我怎样才能做到这一点?我找不到有用的方法

有帮助吗?

解决方案

Qt中许多事情不能是“传统的”移除。相反,在其上调用hide()和破坏它。从了QSplitter 文件:

  

当您隐藏()一个孩子的空间将   另一间分配   儿童。一定会被恢复时   您显示()它一次。

其他提示

我不清楚您是否想保留该小部件并将其放在其他地方,或者是否想销毁该小部件。

  • 销毁小部件: 如果您可以获取指向小部件的指针,则只需将其删除即可。分离器将安全通知其孩子已被删除,并将其从其自身中删除。

  • 保留小部件: 如果抓住指向小部件的指针,则可以简单地将其父级设置为其他小部件,并将其添加到另一个小部件的布局中,并将显示在那里。这是安全的,因为QSplitter将被告知其一个孩子正在被调查。

如果您想将父级设置为 NULL(cjhuitt 的答案),请注意您现在负责清理该内存,因为该小部件不再具有父级。

我喜欢Tuminoid的答案。但是,如果你绝对需要它删除,尝试让你想删除的小部件,并呼吁该部件setParent( NULL )。这是我最好的猜测。

如果你持有一个指针部件,那么就删除它,或者,如果你想成为安全起见使用deleteLater()。

如果你没有小部件指针,使用了QSplitter ::小部件(INT指数)的功能。然后,可以用调用其deleteLater()槽。

如果你不具备的小工具的索引,但你还是知道小部件的objectName(),然后的QObject :: findChild()是让小部件指针你唯一的办法。

我遇到同样的问题。在Qt 4.8暂时隐藏了QSplitter我只是把它隐藏的部件之一。但是这还不够,因为分配器手柄仍然可以移动。但是手柄可以访问和隐藏,以及:

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

另一种简单的方法来防止子构件从得到删除是使用QSplitter.takeWidget(子)。这也是从分离器除去小部件的推荐方式。 (Qt文档)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top