Qt扫盲-QCloseEvent 理论总结

一、概述

QCloseEvent 其实就是关闭事件会发送给用户想要关闭的 Widget,通常是通过从window菜单中选择“Close”,或者单击X标题栏按钮。当你调用QWidget::close() 以编程方式关闭 widget 时,也会发送这个消息的。我们有时候希望在关闭窗口得时候去保存一些内容,或者保存关闭前的配置的时候就需要使用这个使用这个事件对应的事件处理函数。

Close事件包含一个标志,表示接收方是否希望widget关闭。当 Widget接受close事件时,它会被隐藏(如果是通过Qt::WA_DeleteOnClose标志创建的,它会被销毁)。如果它拒绝接受close事件,则什么也不会发生。

二、使用情况

事件处理程序 QWidget::closeEvent() 接收 QCloseEvent 事件。这个事件处理程序的默认实现接受close事件。如果不希望 Widget被隐藏,或者希望进行一些特殊处理,则应该重新实现事件处理程序并ignore()事件。

其实就是在自己的窗口里面重写 QWidget::closeEvent() 函数即可。

三、特殊处理

如果你希望widget在关闭时被删除,可以用Qt::WA_DeleteOnClose标志创建它。这对于多窗口应用程序中的独立顶层窗口非常有用。这个相当于每次关闭这个窗口后,这个窗口就释放内存了,每次打开的总是新的窗口。就是打开一个窗口后,其他窗口也会关闭的使用场景就会用到这个功能。

QObjects在被删除时发出destroyed()信号。

如果最后一个顶层窗口关闭了,就会发出QGuiApplication::lastWindowClosed()信号。
如果事件的接收者同意关闭 Widget,isAccepted()函数返回true;调用accept()来同意关闭小 Widget,如果这个事件的接收者不希望关闭小 Widget,则调用ignore()。

四、相关关闭和隐藏函数

  • void QCoreApplication::quit()
    告诉应用程序退出,返回代码0(成功)。等价于调用QCoreApplication::exit(0)。将QGuiApplication::lastWindowClosed()信号连接到quit()是很常见的,你也经常将例如QAbstractButton::clicked()或QAction、QMenu或QMenuBar中的信号连接到它。

  • void QCoreApplication::exit(int returnCode = 0)
    用返回码告诉应用程序退出。
    调用完这个函数后,应用离开主事件循环,返回exec()。exec()函数返回returnCode。如果事件循环没有运行,这个函数什么都不做。
    按照惯例,returnCode为0表示成功,任何非零值都表示错误。

    扫描二维码关注公众号,回复: 15601212 查看本文章

注意:与同名的C库函数不同,这个函数确实返回到调用者——停止的是事件处理。不是标准的C函数退出程序。

注意:最好总是使用在使用槽函数的时候,设置这个参数:QueuedConnection。如果连接到这个槽函数的信号在控制进入主事件循环之前发出(例如在“int main”调用exec()之前),这个槽函数就没有效果,应用程序永远不会退出。使用排队连接可以确保在控制器进入主事件循环之前不会调用槽函数。

猜你喜欢

转载自blog.csdn.net/qq_43680827/article/details/131599430
今日推荐