qt中隐藏、关闭和显示之间的差异

qt中隐藏、关闭和显示之间的差异,qt,qt5,Qt,Qt5,按钮或任何小部件的隐藏、关闭和显示在内存方面有什么区别 如果我不想再次使用widget,哪个更好?根据,您可以阅读以下内容: 关闭: 关闭此小部件。如果小部件已关闭,则返回true;否则 返回false 首先,它向小部件发送一个QCloseEvent。如果该小部件处于隐藏状态,则该小部件将被隐藏 接受关闭事件。如果忽略该事件,则不会发生任何事情。这个 QWidget::closeEvent()的默认实现接受关闭 事件 如果小部件具有Qt::WA_DeleteOnClose标志,则小部件也会 删除

按钮或任何小部件的隐藏、关闭和显示在内存方面有什么区别

如果我不想再次使用widget,哪个更好?

根据,您可以阅读以下内容:

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

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

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

QApplication::lastWindowClosed()信号在上次 带有 Qt::WA_QuitOnClose属性集已关闭。默认情况下,此属性 为除临时窗口(如splash)之外的所有窗口小部件设置 屏幕、工具窗口和弹出菜单

隐藏:隐藏小部件。此函数相当于 setVisible(false)

注意:如果您使用QDialog或其子类并调用 函数之后,将显示对话框 在它原来的位置

显示:显示小部件及其子小部件。此函数是 等同于setVisible(true)

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

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

但我认为函数的名称足够明确,可以理解

首先,正如@Hayt所说的,文档

对于实际答案:

  • hide()
    setVisible(false)
    相同
  • show()
    setVisible(true)
    相同
  • close()
    通过触发
    QCloseEvent
    尝试关闭小部件,如果事件被接受,结果是:

  • 如果小部件上未设置默认的
    Qt::WA_DeleteOnClose
    属性,则调用
    hide()
    与此相同

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

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

    delete pointerToMyWidget;
    


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

    您是否尝试阅读这些插槽的文档?您可以使用close()删除(并释放内存)小部件,只需管理信号。或者,如果您使用
    删除
    ,您可以通过调用
    删除
    @BenjaminT将其删除,首先确保它没有父对象,否则当它被销毁时,父对象将再次对其调用
    delete
    。@Valerio否,子对象将从其父对象-子对象列表中删除自己。这是通过调用
    d->setParent\u helper(0)完成的位于
    ~QObject()
    中。因此,当父对象被销毁时,被删除的子对象将不会再次被删除,因为它不再作为子对象列出。
    pointerToMyWidget->deleteLater();