qt中隐藏、关闭和显示的区别

Posted

技术标签:

【中文标题】qt中隐藏、关闭和显示的区别【英文标题】:Difference between hide, close and show in qt 【发布时间】:2016-09-09 08:52:21 【问题描述】:

就内存而言,按钮或任何小部件的隐藏、关闭和显示有什么区别?

如果我不想再次使用小部件,哪个更好?

【问题讨论】:

您是否尝试过阅读这些插槽的文档? 【参考方案1】:

首先如@Hayt 所说,read 文档。

对于实际答案:

    hide()setVisible(false) 相同。 show()setVisible(true) 相同。

    close() 尝试通过触发QCloseEvent 来关闭小部件,如果事件被接受,结果是:

      如果在默认的小部件上没有设置Qt::WA_DeleteOnClose 属性,则与调用hide() 相同。

      如果设置了Qt::WA_DeleteOnClose,则与调用deleteLater() 相同。

就内存而言,这三个中的任何一个都不会改变任何东西(close() 除外,如果您设置了Qt::WA_DeleteOnClose)。如果您不想使用该小部件,最好将其删除:

delete pointerToMyWidget;

pointerToMyWidget->deleteLater();

第二种形式通常更安全,因为第一种形式可能很危险,具体取决于您在何处编写。 (例如,您在由您删除的小部件发出的信号调用的插槽中删除它)。

【讨论】:

您可以使用 close() 删除(并释放内存)小部件,只需要管理信号。 或者你可以通过调用delete删除它。 @BenjaminT 如果你用delete删除它,首先确保它没有父级,否则当它被销毁时,父级会第二次调用delete @Valerio 不,孩子将自己从其父子列表中删除。这是通过在~QObject() 中调用d->setParent_helper(0); 完成的。所以当父级被销毁时,被删除的子级不会被第二次删除,因为它不再被列为子级。【参考方案2】:

根据Qt,您可以阅读:

关闭: 关闭此小部件。如果小部件已关闭,则返回 true;除此以外 返回 false。

首先它向小部件发送一个 QCloseEvent。如果小部件是隐藏的 接受关闭事件。如果它忽略该事件,则不会发生任何事情。这 QWidget::closeEvent() 的默认实现接受关闭 事件。

如果小部件有 Qt::WA_DeleteOnClose 标志,小部件也是 删除。无论是否 小部件是否可见。

QApplication::lastWindowClosed() 信号在最后一个 可见的主窗口(即没有父窗口的窗口) Qt::WA_QuitOnClose 属性集已关闭。默认情况下,此属性 为所有小部件设置,除了瞬态窗口,如飞溅 屏幕、工具窗口和弹出菜单。

.

HIDE :隐藏小部件。这个函数相当于 设置可见(假)。

注意:如果您正在使用 QDialog 或其子类并调用 该函数后的show()函数,将显示对话框 在原来的位置。

.

SHOW :显示小部件及其子小部件。这个功能是 相当于 setVisible(true)。

如果您不需要使用您的小部件,请致电close()。您可以管理事件以销毁您的小部件。

hide() 只隐藏。它只是图形化的,你看不到你的小部件,但你不会破坏它。

但我认为函数的名称已经足够明确了!

【讨论】:

以上是关于qt中隐藏、关闭和显示的区别的主要内容,如果未能解决你的问题,请参考以下文章

QT 设置QDialog显示与隐藏系统按钮(最大小化等)

QT 设置QDialog显示与隐藏系统按钮(最大小化等)

QT 设置QDialog显示与隐藏系统按钮(最大小化等)

在qt中显示隐藏的dockwidget

Eric IDE,Qt 文件对话框:显示隐藏文件

在 Qt 中隐藏和重新启动相同的 QApplication 实例