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中隐藏、关闭和显示的区别的主要内容,如果未能解决你的问题,请参考以下文章