第四十八天学习记录:工作相关:Qt resizeEvent 的诡异问题

news2024/10/7 14:23:57

今天,在做一个新项目时,发现一个诡异的问题。

在软件初次打开的时候,会调用一次resizeEvent(QResizeEvent *sizechangeevent)函数来对主界面控件大小以及位置进行一次调整。

但由于窗口在设计的时候用的一个大小,而在打开软件后需要将其窗口最大化,因此会用到showMaximized()函数。
为了避免重复resizeEvent函数,我将main函数中的w.show;屏蔽。
main函数如下:

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    //w.show;
    return a.exec();
}

主界面cpp如下:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
	resizeflag=true;
	this->showMaximized();
}

void MainWindow::resizeEvent(QResizeEvent *sizechangeevent)
{
    Q_UNUSED(sizechangeevent);
    qDebug()<<resizeflag;
}

在初始化resizeflag时,resizeflag是等于false的。但是奇怪的事情出现了,以上代码运行的结果是两个true。
在这里插入图片描述
这就意味着函数

void MainWindow::resizeEvent(QResizeEvent *sizechangeevent)

被调用了两次,而且这两次都是在resizeflag=true;之后调用的。

更诡异的事情在后面:
当我将this->showMaximized();和resizeflag=true;调换位置时,想象的是因为resizeflag=true;在结构函数最后才进行,因此在这之前resizeflag应该一直处于false状态。

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->showMaximized();
	resizeflag=true;
}

但输出却是这样的:
在这里插入图片描述

于是,我在resizeEvent函数中加了句qDebug()<width();输出窗口大小变化时窗口的宽度,输出如下:
在这里插入图片描述
为了更好的观察代码执行顺序,我将构造函数代码变更成这样:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    qDebug()<<"1";
    this->showMaximized();
    qDebug()<<"2";
    resizeflag=true;
}

输出如下:
在这里插入图片描述
对比代码可以看出,在执行this->showMaximized();时,实际上窗口并没有最大化,而是在当构造函数结束之后才执行的最大化,而this->showMaximized();的位置似乎是执行的this->show;
为了印证这一点,我将代码更改成如下:

    qDebug()<<"1";
    this->show();
    qDebug()<<"2";
    resizeflag=true;
    this->showMaximized();

输出与上一个输出一样。

我不知道其底层逻辑是怎么操作的,但至此我能推测原因很有可能是this->showMaximized();进行前没有this->show();的话,会首先进行this->show();在构造函数结束后才会再次进行最大化操作。

我将代码更改如下:

    qDebug()<<"1";
    this->show();
    qDebug()<<"2";
    resizeflag=true;

这样写就没有像之前那样输出2个true或者false,输出如下:
在这里插入图片描述
因此,在涉及到首次进行showMaximized()函数时,为了避免连续调用两次resizeEvent函数,需要先进行一次show();并需要一个flag在show();的时候为false,show();之后变更为true。
这样再调用showMaximized()时,便能很好的调整窗口控件并且避免重复执行。

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

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

相关文章

基于全志D1-H的Tina Linux SPI主从通信验证实录

本文转载自&#xff1a;https://bbs.aw-ol.com/topic/3031 作者 whycan矿工-小叶 背景 主控: D1H板卡: 两块哪吒开发板(以下简称为主机, 从机)操作系统: Tina Linux 2.0 问题 验证D1H芯片SPI主从机通信. 硬件接线 主机SPI从机SPI19SPI1_MOSISPI1_MOSI1921SPI1_MISOSPI1_M…

Git切换用户;Git提交之后是别人的用户怎么办?

Git切换用户 前言解决方法1.删除计算机凭证2.Idea控制台切换 前言 前几天在入职之后&#xff0c;公司的电脑上仍然储存了之前用户的信息&#xff0c;比如git。 我在创建分支、提交代码的时候会遇到这样的问题&#xff1a; 登录的是我自己的账号&#xff0c;但是在git动态里缺…

借助TeeChart图表控件,创建本地静态、实时浏览器图表

Steema是全球领先的图表类控件公司&#xff0c;总部设在西班牙的巴塞罗那附近&#xff0c;Steema公司的VCL图表报表控件在全球拥有极高知名度。TeeChart可以在微软的Visual Studio、Office和.NET以及Java和PHP开发平台中使用&#xff0c;也可以作为本地Javascript-HTML5使用。 …

Python新手怎么兼职,用Python在家兼职赚钱的4个方法

随着人工智能技术的发展&#xff0c;各行各业都在发生着变化&#xff0c;每天AI&#xff08;人工智能&#xff09;新技术都在冲击着各行各业&#xff0c;比如WPS的智能设计、阿里的鲁班等等&#xff0c;总有一种干死干活不如早点掌握新技能的感觉&#xff0c;避免心中的小慌张。…

DAY 65 mysql的高可用之MHA集群

MHA概述 什么是 MHA MHA&#xff08;MasterHigh Availability&#xff09;是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点故障的问题。 MySQL故障切换过程中&#xff0c;MHA能做到0-30秒内自动完成故障切换操作。 MHA能在故障切换…

基于原子化思想的 Vue3 组件库 UnoCSS UI

UnoCSS UI 项目地址前言Monorepo 项目架构UnoCSS UI 的模块设计PNPM Monorepo 常用操作: --filter, -wMonorepo 中的依赖管理项目整体结构 基于原子化 CSS 的组件封装方式原子化 CSS 基础原子化 VS 内联样式原子化 VS class 原子化对组件封装的影响unocss-ui/components 项目结…

HashTable 在蚂蚁转化归因中的极致运用

作者&#xff1a;开七 蚂蚁集团数据技术专家 本文围绕 hash cluster 表运用及 Shuffle 过程原理进行讨论&#xff0c;欢迎各位开发者加入大数据计算 MaxCompute 社区&#xff1a;https://developer.aliyun.com/group/maxcompute 概述 蚂蚁的转化归因在初期运行两个多小时的情况…

Facebook拆分的深度思考:社交媒体真的是必需品吗?

在当今数字化时代&#xff0c;社交媒体已经成为我们日常生活中不可或缺的一部分。而Facebook作为其中的巨头之一&#xff0c;不可否认地对人们的社交行为和信息传播产生了巨大的影响。 然而&#xff0c;随着越来越多的争议和讨论浮出水面&#xff0c;我们有必要进行深入思考&a…

文档处理新探究成果——前沿技术CCIG文档图像智能分析论坛分享

目录 前言 一、文档分析与识别最新研究 二、视觉-语言预训练模型及迁移学习 三、篡改文本图像的生成与检测技术 四、智能文档处理技术在工业界的应用与挑战 总结 前言 图文智能处理前沿技术一直是我所关注的技术&#xff0c;尤其在现在集成多态大模型的基础之上&#xff0…

关于PCBA元器件布局的重要性

SMT贴片加工逐步往高密度、细间距的设计发展&#xff0c;元器件的最小间距设计&#xff0c;需考虑SMT厂家的经验和工艺完善程度。元器件最小间距的设计&#xff0c;除了保证SMT焊盘间安全距离外&#xff0c;还应考虑元器件的可维护性。 器件布局时保证安全间距 1、安全距离跟…

设计模式-简单例子理解适配器模式、装饰器模式

文章目录 一、适配器模式1. 要点2. Demo 二、装饰器模式1. 要点2. Demo 三、区别 本文参考&#xff1a; 基本原理&#xff1a;装饰器模式 | 菜鸟教程 (runoob.com) 基本原理&#xff1a;适配器模式 | 菜鸟教程 (runoob.com) 优缺点和区别&#xff0c;装饰模式&#xff1a;适配器…

微服务流量控制组件Sentinel

1 简介 Sentinel是阿里开源的项目&#xff0c;是一款面向分布式服务架构的轻量级流量控制组件&#xff0c;主要以流量为切入点&#xff0c;从流量控制、熔断降级、系统自适应保护等多个维度来保障服务的稳定性。 核心思想是&#xff1a;根据对应资源配置的规则来为资源执行相…

西米支付:“中止”支付牌照,汇卡支付机构“失联”

近日&#xff0c;又一家支付公司因“失联”被列入了经营异常名录。 工商信息显示&#xff0c;目前被“中止”中的持牌支付机构广东汇卡商务服务有限公司&#xff08;简称“汇卡支付”&#xff09;因“通过登记的住所或者经营场所无法联系” 被广州市市场监督管理局列入经营异常…

网络进阶学习:单臂路由(灵魂五问)

单臂路由&#xff08;灵魂五问&#xff09; 一问&#xff1a;什么是单臂路由&#xff1f;二问&#xff1a;单臂路由这一概念怎么出现的&#xff1f;三问&#xff1a;单臂路由解决什么问题&#xff1f;能不能用其他方式取代单臂路由?四问&#xff1a;单臂路由最合适的应用场景&…

电脑E盘被不小心格式化了?别急,介绍三种数据恢复方法

电脑E盘格式化后如何恢复数据&#xff1f;意外的电脑E盘格式化或许是每个人都遇到过的问题。然而&#xff0c;当您发现您的重要数据已经丢失时&#xff0c;您可能会感到沮丧甚至绝望。但请不要担心。在本文中&#xff0c;我们将介绍一些有助于您找回数据的方法&#xff0c;希望…

2023年5月DAMA-CDGA/CDGP数据治理认证咋样

DAMA认证为数据管理专业人士提供职业目标晋升规划&#xff0c;彰显了职业发展里程碑及发展阶梯定义&#xff0c;帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力&#xff0c;促进开展工作实践应用及实际问题解决&#xff0c;形成企业所需的新数字经济下的核心职业…

uvc驱动ioctl分析下

uvc驱动ioctl分析下 文章目录 uvc驱动ioctl分析下uvc_ioctl_enum_input枚举输入uvc_query_ctrl__uvc_query_ctrluvc_ioctl_g_input 获取输入uvc_ioctl_s_input 设置输入uvc_query_v4l2_ctrluvc_ioctl_queryctrl查询控制器uvc_ioctl_query_ext_ctrl查询扩展控制器 uvc_ioctl_g_c…

系统分析师经典易错题,解题思路二

企业应用集成(Enterprise Application Integration EAI)技术企业应用集成技术可以消除信息孤岛,它将多个企业信息系统连接起来,实现无缝集成,使他们就像一个整体一样。EAI是伴随着企业信息系统的发展而产生和演变的,企业的价值取向是推动EAI技术发展的原动力,而EAI的实现…

煤矿电子封条系统 yolov7网络模型

煤矿电子封条系统通过yolov7网络模型算法&#xff0c;煤矿电子封条系统可以实现对煤矿井下人员的出入管理&#xff0c;提高对煤矿井下人员的监管效果。YOLOv7 的策略是使用组卷积来扩展计算块的通道和基数。研究者将对计算层的所有计算块应用相同的组参数和通道乘数。然后&…

从热爱到深耕,在开发路上的他们勇敢逐梦

2022年的程序员节&#xff0c; #大龄程序员去哪儿了#成为了社交媒体上最火的话题之一&#xff0c;程序员的职场成长问题在社会上引起了广泛关注。 有2位在技术领域摸爬滚打很多年的开发者&#xff0c;35岁后的他们&#xff0c;有70后&#xff0c;有80后&#xff0c;依然在编程…