【QT】详细介绍Qt的窗口属性:Qt::WA_DeleteOnClose属性

news2024/9/27 17:31:14

目录

  • 1. close()
  • 2. WA_DeleteOnClose属性
  • 3. 测试
    • 3.1 设置了 Qt::WA_DeleteOnClose 属性
    • 3.2 未设置 Qt::WA_DeleteOnClose 属性
  • 4. 测试代码

1. close()

当我们创建一个窗口(MainWindow, Widget, Dialog, QMessageBox, 等等)后,我们一般会调用close()方法来关闭窗口。

//关闭这个小部件。如果小部件被关闭,则返回true; 否则返回false。
bool QWidget::close() 

调用close()方法后首先它会向widget发送一个关闭事件(QCloseEvent)。如果widget接受了关闭事件,窗口将会隐藏(实际上调用hide())。如果widget忽略该事件,那么窗口将什么也不做。QWidget::closeEvent()默认实现接受关闭事件。默认情况下widget会接受关闭事件,我们可以重写QCloseEvent事件,可以选择接受或者不接受。

2. WA_DeleteOnClose属性

//设置销毁窗口的属性
setAttribute(Qt::WA_DeleteOnClose);

如果widget设置了Qt::WA_DeleteOnClose属性,widget将会被释放(内存释放销毁)。不管widget是否可见,关闭事件都会传递给widget。即接收到QCloseEvent事件后,除了调用hide()方法将窗口隐藏,同时会调用deleteLater()方法将窗口释放掉,不会再占用资源。

所以说调用close()并不一定就会将窗口对象销毁。而只有设置了 Qt::WA_DeleteOnClose属性才会删除销毁
如果这个属性没有设置,close()的作用和hide()setvisible(false)一样,只会隐藏窗口对象而已,并不会销毁该对象

3. 测试

下面是做一个小测试,通过不断打开窗口,再关闭所有打开的窗口。在任务管理器中对比该应用程序所占用的资源大小。

3.1 设置了 Qt::WA_DeleteOnClose 属性

在这里插入图片描述

3.2 未设置 Qt::WA_DeleteOnClose 属性

在这里插入图片描述

4. 测试代码

MainWindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QHBoxLayout>
#include <QMainWindow>
#include <QMessageBox>
#include <QPushButton>
#include <QVBoxLayout>

namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow {
    Q_OBJECT

public:
    explicit MainWindow(QWidget* parent = 0);
    ~MainWindow();

private slots:
    void slotBtnClicked();

private:
    Ui::MainWindow* ui;
};

#endif  // MAINWINDOW_H

MainWindow.cpp

#include "mainwindow.h"

#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent), ui(new Ui::MainWindow) {
    ui->setupUi(this);

    resize(600, 400);
    QWidget* widget = centralWidget();
    QHBoxLayout* HLayout = new QHBoxLayout();
    QPushButton* btn = new QPushButton(widget);
    btn->setText(QStringLiteral("打开窗口"));
    HLayout->addStretch(3);
    HLayout->addWidget(btn, Qt::AlignHCenter);
    HLayout->addStretch(3);

    QVBoxLayout* VLayout = new QVBoxLayout(widget);
    VLayout->addLayout(HLayout);
    VLayout->addStretch(1);

    connect(btn, &QPushButton::clicked, this, &MainWindow::slotBtnClicked);
}

MainWindow::~MainWindow() { delete ui; }

void MainWindow::slotBtnClicked() {
    static int i = 1;
    QMessageBox* mesBox = new QMessageBox(this);
    
	mesBox->setAttribute(Qt::WA_DeleteOnClose);  //设置属性
	
    mesBox->setWindowTitle(QStringLiteral("提示"));
    mesBox->setText(QStringLiteral("您打开了%1个窗口").arg(i++));
    mesBox->setModal(false);  //设置非模态
    mesBox->setVisible(true);
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

matlab绘制折线图基本操作

本篇博客主要总结matlab绘制折线图的基本操作&#xff0c;使用的函数是plot函数&#xff0c;关于plot的函数语法规则&#xff0c;这里不再赘述&#xff0c;可以参考matlab官方文档&#xff0c;https://ww2.mathworks.cn/help/matlab/ref/plot.html#d124e1037051&#xff0c;不看…

GIS开源库GEOS库学习教程(三):空间关系/DE-9IM/谓词

1、DE-9IM 要判断两个多边形的关系&#xff0c;实际上属于几何图形空间关系判断。几何图形并不只有多边形一种&#xff0c;它包括点、线、面构成的任何图形&#xff0c;两两之间相互关系也有很多种&#xff0c;因此空间关系非常复杂。根据前人的研究&#xff0c;总结出了DE-9IM…

图论经典A-Star(A*) Algorithm最短路径,networkx,Python(1)

图论经典A-Star(A*) Algorithm最短路径&#xff0c;networkx&#xff0c;Python&#xff08;1&#xff09; A-Star Algorithm&#xff0c;即为A*&#xff08;A星&#xff09;算法&#xff0c;图的最短路径。 &#xff08;1&#xff09;A-Star(A*)算法需要事先知道起点和终点才…

PhpStorm 2022.3.2消除顶部Windows窗口白色区域

问题图片&#xff1a; 解决方法&#xff1a;勾选Merge main menu with window title 效果图&#xff1a;

第三章:JavaScript 脚本语言(一)

一、简介 JavaScript是web页面中的一种脚本语言&#xff0c;由客户端浏览器解释执行。不需要编译&#xff0c;主要作用是将静态页面转换成用户交互的动态页面。 JavaScript主要有三大部分&#xff1a;ECMAScript (核心)&#xff0c;DOM&#xff08;文档对象模型&#xff09;&…

溯源取证-Linux内存取证 中难度篇

原谅我这么晚才出来文章&#xff0c;因为最近忙着录课&#xff0c;至于为啥没有基础篇&#xff0c;是因为靶场里没看见&#xff0c;哈哈 这个也是研究了好几个晚上才出来的东西&#xff0c;此处场景为linux环境下的rootkit病毒&#xff0c;我们通过这篇文章可以通过内存取证发…

Jmeter测试dubbo服务

1、什么是dubbo接口 Dubbo 接口是阿里巴巴开源的致力于提供高性能和透明化的RPC远程服务调用方案&#xff0c;以及SOA服务治理方案&#xff0c;dubbo框架告别了传统的web service的服务模式&#xff0c;进而改用provider和consumer模式进行服务。为什么是高性能的呢&#xff1f…

制作四个文件启动的镜像

一 环境搭建&#xff1a;vivado2018.3&#xff0c;petalinux2018.3&#xff0c; 1.petalinux环境设置 所使用的编译环境需要使用petalinux这个软件&#xff0c;《第五章Petalinux 的安装》里面的5.1-5.4。有详细的安装过程&#xff0c;按照第五章的顺序把环境搭建好。可以不装…

【PR 基础】新建序列

目录 一、新建序列 二、序列预设 三、设置 一、新建序列 在如下区域点击鼠标右键&#xff0c;选择 新建项目-》序列 或 点击工具栏中的文件-》新建-》序列 二、序列预设 &#xff08;1&#xff09;时基&#xff1a;就是指帧速率&#xff0c;也就是每秒播放帧的数量&#xf…

iOS Matter 操作证书签发方案

在 Matter 配网和操作中&#xff0c;为了信息交互的安全&#xff0c;在配网时&#xff0c;Commissioner自身需要完整的证书&#xff0c;同时需要向设备安装操作证书。 Matter 证书包含&#xff1a; RCA: 根证书 ICA: 中间证书&#xff0c;可选 NOC: 操作证书(注意有以下两种…

人工智能的前沿信息获取之使用文献数据库

人工智能的知识更新迭代非常迅速&#xff0c;因此对人工智能前沿的跟踪非常必要。本文主要介绍了使用文献数据库获取人工智能前沿信息的方法。 文献数据库是检索和下载论文的主要工具&#xff0c;对文献进行检索和下载的技巧在本科公共基础课《文献检索》或《信息检索》等类似…

家庭智能触摸面板开关一Homekit智能

触摸开关&#xff0c;即通过触摸方式控制的墙壁开关&#xff0c;其感官场景如同我们的触屏手机&#xff0c;只需手指轻轻一点即可达到控制电器的目的&#xff0c;随着人们生活品质的提高&#xff0c;触摸开关将逐渐将换代传统机械按键开关。 触摸开关控制原理 触摸开关我们把…

【ESP-IDF】介绍NVS

ESP-IDF是一款由乐鑫科技&#xff08;Espressif Systems&#xff09;开发的面向ESP32和ESP32-S系列芯片的开发框架&#xff0c;NVS&#xff08;Non-Volatile Storage&#xff09;是其中的一项功能。 NVS是一种用于在嵌入式系统中保存持久化数据的键值存储库。在ESP-IDF中&#…

虚拟化技术 — SR-IOV 单根 I/O 虚拟化

目录 文章目录 目录SR-IOVSR-IOV VEBSR-IOV VEPASR-IOV Multi-ChannelSR-IOV OvSSR-IOV 的应用使能 SR-IOV VFs挂在 VF 到 KVM 虚拟机中SR-IOV 的 NUMA 亲和性VF 的网络配置VFs Bonding SR-IOV 虚拟机的热迁移问题 SR-IOV 传统的 I/O 虚拟化方案需要 VMM 来捕获和模拟 VM 的 I…

400左右蓝牙耳机什么牌子音质好?400左右的无线蓝牙耳机推荐

过去几年苹果的AirPods深受大家欢迎&#xff0c;但要论最佳耳机&#xff0c;还要考虑佩戴类型&#xff0c;功能上又分降噪水平&#xff0c;甚至价格上也要实惠&#xff0c;毕竟对于不想太高预算来获得出色音质和舒适度的人来说&#xff0c;这也是他们心中的"最佳"产品…

Kubernetes那点事儿——调度策略

Kubernetes那点事儿——调度策略 前言一、静态Pod二、nodeSelector 节点选择器三、nodeName四、taint污点五、tolerations污点容忍六、容器资源限制七、nodeAffinity节点亲和性 前言 Kubernetes的强大之处离不开它的调度系统&#xff0c;它为Pod调度到某个Node上提供了多种方式…

Linux学习_设备树实现中断

Linux学习_设备树实现中断 中断层级结构设备树_中断控制器设备树_中断子节点驱动程序获取GPIO获取中断号申请中断中断处理函数 中断层级结构 就硬件而言&#xff0c;中断控制器指的就是GIC&#xff0c;但是实际在软件上&#xff0c;图中的GPIO等我们也称之为中断控制器。 外部…

[PyTorch]预训练权重的转换

众所周知&#xff0c;使用大量数据预训练后的骨干网络可以提升整个模型的泛化能力&#xff0c;而我们如果将网络的骨干网络替换后则不能直接使用原来的权重。这个项目的作用是在你替换骨干网络后可以将网络预训练权重一并“偷”过来。 下给结论&#xff1a;将DeeplabV3的骨干网…

详解 TCP(三次握手 + 四次挥手 + 滑动窗口 + 拥塞控制 + 和 UDP 做对比)

文章目录 1. TCP / IP五层模型和OSI七层模型1&#xff09;OSI七层模型2&#xff09;TCP/IP 五层模型 2. TCP和UDP1&#xff09; TCP首部结构2&#xff09;UDP首部结构3&#xff09;TCP和UDP的区别2.2 UDP和TCP对应的应用场景 3. TCP 建立连接时的三次握手1&#xff09;为什么需…

虚拟专用网VPN与网络地址转换NAT技术

1、专用网络或本地互联网 一方面现在随着个人电脑的增大&#xff0c;IP地址十分紧缺&#xff0c;所以如果为每一台电脑都分配个一个全球IP地址&#xff08;唯一的&#xff09;不太现实&#xff1b;另外一方面&#xff0c;很多机构&#xff08;比如大公司&#xff09;往往只需要…