Qt 窗口可见性 之 close函数和hide函数

close函数

基本功能

        close() 方法的主要功能是关闭窗口,并触发一系列与关闭相关的事件和信号。调用此方法后,窗口将不再可见,但窗口对象本身仍然存在,并且可以被再次显示(通过调用 show() 方法)。

事件处理
  • QCloseEvent:在调用 close() 方法时,Qt 会向窗口发送一个 QCloseEvent 事件。这个事件提供了一个机会,让开发者在窗口关闭之前执行一些清理工作或确认操作。
  • 事件处理函数:开发者可以通过重写 QWidget 类的 closeEvent(QCloseEvent *event) 方法来捕获并处理这个事件。在这个方法中,你可以决定是否接受关闭事件(即是否允许窗口关闭)。
void FormChild::closeEvent(QCloseEvent *event)
{qDebug() << "do closeEvent";//若不希望子窗口被关闭,则忽略event->ignore();//默认允许窗口关闭,有无此语句都可以//event->accept();
}
资源释放

        默认情况下,调用 close() 方法并不会立即释放窗口对象的资源。窗口对象仍然存在于内存中,并且可以通过调用 show() 方法再次显示。如果你希望窗口在关闭时立即被销毁并释放资源,你可以使用以下方法之一:

  • 设置属性:通过调用 setAttribute(Qt::WA_DeleteOnClose, true) 方法,你可以设置窗口在关闭时自动删除自己。这样,当窗口关闭时,Qt 会自动调用 deleteLater() 方法来销毁窗口对象。
  • 手动删除:另一种方法是手动删除窗口对象。这通常在你确定窗口不再需要时进行。你可以通过调用 delete 操作符来销毁窗口对象(但请注意,这样做之前需要确保没有其他指针指向该对象,以避免悬挂指针问题)。

hide函数

功能描述
  • 隐藏窗口:调用hide()函数会使窗口或小部件变得不可见。
  • 保留资源:虽然窗口被隐藏,但它仍然存在于内存中,并且其所有资源和状态(如大小、位置、内容等)都被保留。
  • 事件处理:隐藏后的窗口不会接收鼠标或键盘事件,但仍然可以接收某些特定的事件,如定时器事件。
使用场景
  • 临时隐藏:在某些情况下,你可能需要暂时隐藏一个窗口,然后在需要时再次显示它。例如,在显示一个弹出菜单时隐藏主窗口。
  • 资源管理:隐藏窗口而不是销毁它可以节省资源,因为重新创建一个窗口可能比显示一个已经存在的窗口要耗费更多的资源。

区别

功能不同
  • close():这个函数不仅隐藏窗口,还会触发一系列关闭事件。默认情况下,它会向窗口发送一个QCloseEvent事件,如果窗口接受了这个事件,close()函数会进一步隐藏窗口。此外,如果窗口设置了Qt::WA_DeleteOnClose属性,close()还会在隐藏窗口后删除它,释放其占用的资源。
  • hide():这个函数仅用于隐藏窗口,不会触发关闭事件,也不会删除窗口。隐藏后的窗口仍然存在于内存中,可以随时通过show()函数重新显示。
事件处理
  • 当调用close()时,窗口有机会通过重新实现closeEvent()函数来处理关闭事件,决定是否真的要关闭窗口。
  • hide()则不会触发任何事件,它只是简单地将窗口设置为不可见(并不是最小化)

资源释放

  • 如果窗口设置了Qt::WA_DeleteOnClose属性,并且调用了close()函数,那么窗口及其子对象将被删除,释放其占用的资源。
  • hide()不会释放任何资源,它只是将窗口隐藏起来。

联系

  • 隐藏效果:无论是close()还是hide(),它们都会使窗口变得不可见。然而,如前所述,close()在隐藏窗口后可能还会执行其他操作(如删除窗口)。
  • 调用关系:在Qt的源码中,close()函数在隐藏窗口时实际上调用了hide()函数。因此,从某种程度上说,close()在隐藏窗口方面的行为是依赖于hide()的。

使用场景

  • close():当你想要关闭一个窗口并释放其占用的资源时,应该使用close()函数。特别是当窗口设置了Qt::WA_DeleteOnClose属性时,close()会确保窗口被正确删除。
  • hide():当你只是想要暂时隐藏一个窗口,但保留其状态和资源以便稍后再次显示时,应该使用hide()函数。

代码案例: Qt 窗口可见性 之 工程案例-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/458544.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QT建立工程时出现了:Reading Project

QT建立工程时出现了&#xff1a;Reading Project 打开建立的工程发现&#xff0c;缺少build文件 从别的工程中复制一个build&#xff0c;点击.pro就可以打开了

【CSS3】css开篇基础(4)

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…

Spring Boot实现的动态化酒店住宿管理系统

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理酒店客房管理系统的相关信息成为必然。开发…

图文详解ChatGPT-o1完成论文写作的全流程

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 本月中旬OpenAI发布了OpenAI o1系列新的AI模型。 据OpenAI介绍&#xff0c;这些模型旨在花更多时间思考后再做出反应&#xff0c;就像人一样。通过训练&#xff0c;它们学会改进思维过…

深度学习(六)CNN:图像处理的强大工具(6/10)

一、CNN 的概述 卷积神经网络&#xff08;Convolutional Neural Networks&#xff0c;CNN&#xff09;是深度学习的代表算法之一&#xff0c;在深度学习中占据着重要地位。 CNN 的发展历程可追溯至 20 世纪 80 至 90 年代&#xff0c;时间延迟网络和 LeNet - 5 是最早出现的卷…

conda虚拟环境中安装cuda方法、遇到的问题

conda虚拟环境中安装cuda方法、遇到的问题 文章目录 conda虚拟环境中安装cuda方法、遇到的问题conda虚拟环境中安装cudacuda.h和cuda_runtime.hpytorch运行时的CUDA版本其他问题检查包冲突nvcc -V和nvidia-smi显示的版本不一致cuda路径 conda虚拟环境中安装cuda 参考文章&…

【AIGC】从CoT到BoT:AGI推理能力提升24%的技术变革如何驱动ChatGPT未来发展

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;迈向AGI的新跨越&#x1f4af;BoT与CoT的技术对比技术原理差异推理性能提升应用范围和通用性从错误中学习的能力总结 &#x1f4af;BoT的工作流程和机制初始化过程生成推…

layaair获取组件里的脚本

获取脚本用getComponents方法&#xff0c;但是这个方法里的参数不是脚本的名称。而是组件类型。如果你需要获取脚本&#xff0c;则类型为Laya.Script。挺坑的。我在官网找都没找到这个是这么用的。我猜测的。没想到试了一下成功了。 property(Laya.Node)public img1: Laya.Node…

碰一碰支付系统搭建怎么做?头部公司源码大测评!

随着碰一碰支付dai li骗局的曝光&#xff0c;越来越多的人开始选择将目光转向碰一碰支付系统搭建这一入局方式&#xff0c;连带着与之相关的多个话题&#xff0c;如碰一碰支付系统搭建怎么做等也成为了当前的一大热点。 毕竟&#xff0c;相较于dai li 模式的与第三方公司合作、…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-26

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-26 前言 本期相关论文可以从“下载” 资源中获取&#xff0c;如果有感兴趣的问题&#xff0c;欢迎交流探讨&#xff01; 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-26前言目…

【C++进阶】C++11(上)

【C进阶】C11(上) &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;C&#x1f96d; &#x1f33c;文章目录&#x1f33c; 1. C11的发展史 2. 列表初始化 2.1 C98的传统{} 2.2 C11中的{} 2.3 C11中的std::initializer_list 3. 右值引用…

Kaggle竞赛——灾难推文分类(Disaster Tweets)

目录 1. 准备工作2. 资源导入3. 数据处理4. 绘制词云图5. 数据可视化5.1 词数和字符数可视化5.2 元特征可视化5.3 类别可视化 6. 词元分析6.1 一元语法统计6.2 多元语法统计 7. 命名实体识别8. 推文主题提取9. 构建模型9.1 数据划分与封装9.2 模型训练与验证 10. 模型评估11. 测…

jvm虚拟机介绍

Java虚拟机&#xff08;JVM&#xff09;是Java语言的运行环境&#xff0c;它基于栈式架构&#xff0c;通过加载、验证、准备、解析、初始化等类加载过程&#xff0c;将Java类文件转换成平台无关的字节码&#xff0c;并在运行时动态地将其翻译成特定平台的机器码执行。 JVM的核心…

App测试环境部署

一.JDK安装 参考以下AndroidDevTools - Android开发工具 Android SDK下载 Android Studio下载 Gradle下载 SDK Tools下载 二.SDK安装 安装地址&#xff1a;https://www.androiddevtools.cn/ 解压 环境变量配置 变量名&#xff1a;ANDROID_SDK_HOME 参考步骤&#xff1a; A…

K8s中TSL证书如何续期

TSL是什么 K8s中的作用是什么&#xff1f; 在 Kubernetes&#xff08;K8s&#xff09;中&#xff0c;TSL 指的是 Transport Layer Security&#xff0c;也就是传输层安全协议。它是用来保护在网络上传输的数据的安全性和隐私性。 TSL 在 Kubernetes 中的作用包括&#xff1a;…

铜业机器人剥片 - SNK施努卡

SNK施努卡有色行业电解车间铜业机器人剥片 铜业机器人剥片技术是针对传统人工剥片效率低下、工作环境恶劣及生产质量不稳定的痛点而发展起来的自动化解决方案。 面临人工剥片的诸多挑战&#xff0c;包括低效率、工作环境差、人员流动大以及产品质量控制不精确等问题。 人工剥片…

OSPF特殊区域及其他特性

不用的链路这状态信息没必要一直保存&#xff0c;要不路由器承受不了。用OSPF 特殊区域解决 1. Stub区域和Totally Stub区域 R1作为ASBR引入多个外部网段&#xff0c;如果Area 2是普通区域&#xff0c;则R3将向该区域注入5类和4类LSA。 当把Area 2配置为Stub区域后&#xff1a…

51单片机之蜂鸣器驱动

1.简介 蜂鸣器是一种一体化结构的电子讯响器&#xff0c;采用直流电压供电&#xff0c;广泛应用于计算机、打印机、 复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。   压电式蜂鸣器主要…

Linux练习_2账户管理

题目描述1 建立用户组 [rootlocalhost ~]# groupadd -g 2000 shengchan [rootlocalhost ~]# groupadd -g 2001 caiwu [rootlocalhost ~]# groupadd -g 2002 jishu [rootlocalhost ~]# tail -3 /etc/group shengchan:x:2000: caiwu:x:2001: jishu:x:2002: [rootlocalhost ~]# 建…