如何从另一个QWidget中移除小部件?

8
我创建了一个QWidget(父级)。在父窗口内部,我创建了另一个QWidget(子级)。在运行时,我需要删除子窗口。如何做到这一点?
我没有使用任何布局,直接放置在父窗口中。
请帮助我解决这个问题。

我找到了答案:https://dev59.com/eW865IYBdhLWcg3wLrlE - saravanan
2个回答

8

If you add the widget with e.g.:

QWidget *w = new QWidget(parent);

如果你想要移除它,可以使用以下方法:

delete w;

另一种方法是将其隐藏:

w->hide();

但我不知道子窗口部件的名称(在运行时我也正在创建子窗口部件)。我该如何找到并删除它? - saravanan
const QObjectList & children () const. 这是一个 QObject 的方法。你可以用它来获取子对象。或者你可以简单地存储指向你想要删除的小部件的指针。 - Andrew

7

这个答案适用于那些通过搜索引擎到达并想要回答标题中提出的问题的人。

如果您想从父对象中移除子对象而又不想删除或隐藏它(这并不会将其从其父对象中移除),请将子对象的父级设置为NULL

QWidget::setParent(NULL)

请注意,像这样明确地重新分配小部件会带来几个影响(例如,可见性会自动设置为隐藏)。有关更多信息,请参见 QWidgets文档

3
经过两个小时的谷歌搜索,我找到了这个宝石,它真正地从布局中移除(但不删除)小部件。现在this->ui->myLayout->removeWidget(myWidget);也已经过时了。感谢让我继续我的Web开发逃避现实Qt应用程序。 - JackLeEmmerdeur
1
您先生是一位英雄。在找到这个答案之前,我进行了广泛的搜索。谢谢您! - Malachi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接