【问题标题】:How to delete a widget from a stacked widget in Qt如何从 Qt 中的堆叠小部件中删除小部件
【发布时间】:2010-03-24 09:50:32
【问题描述】:

使用QStackedWidget在视图之间切换,就能在视图之间进行遍历了。

我在某些情况下遇到问题,我不需要小部件,但我想完全删除它们。

QStackedWidget 提供删除小部件的功能,小部件的所有权仍然存在,我的意思是小部件将被隐藏。

我不希望这种情况发生 - 当我调用删除小部件时,它应该被删除。我该如何处理?

【问题讨论】:

  • 您是在堆栈上创建对象,还是在堆上创建对象但在 QStackedWidget 中?问题标题暗示前者,问题文本暗示后者。

标签: qt qt4 symbian widget nokia


【解决方案1】:

您是否尝试在删除对象后简单地删除它?即

stackWidget->removeWidget(myWidget);
delete myWidget;

【讨论】:

  • QStackedWidget::removeWidget 的文档令人困惑:所有权确实转移回应用程序,调用 removeWidget 后删除/释放小部件是正确的。
【解决方案2】:

许多 Qt 对象在删除时会自动删除。 (至少,在 QtGraphics API 中事情是这样工作的)我怀疑简单地删除对象也会删除它,因为 Qt 对象确实会发出它们已被删除的信号。

【讨论】:

  • 你认为,我有一个成员变量或局部变量,我会动态分配内存,在这种情况下,当我删除对象时,那些成员和局部变量会自动删除?还是我们需要手动删除?