Qt对象树

对象树

1.QLabel* label = new QLabal(this)

这个代码在new了之后没有释放,不会造成内存泄漏。

原因是这个对象是挂到了对象树上。

qt就是设计了一个n叉树,将各种元素组织起来了。

例如以下图

在这里插入图片描述

通过树形结构,就把界面上显示的这些控件对象都组织起来了。

使用对象树,把这些内容组织起来,在窗口关闭的时候释放。

所以,通过new的方式创建对象,也就是把这个对象的生命周期,交给Qt的对象树来统一管理。

假如在栈上创建的话,生命周期会随着构造函数的结束,就释放掉。

将对象挂到对象树上

构造函数需要有QWidget* parent,将parent赋值给label对象。这样才能label对象挂到对象树上。

如何解决qt中的乱码问题

1.不要使用cout输出,使用QDebug()工具

使用QDebug()可以很好地处理字符编码,达到预期的效果。

QDbug是Qt中的类,但是又不会直接使用类。

使用qDebug()这个东西,他封装了QDebug()对象,直接使用qDebug()就行,相当于使用cout。

但是Linux使用Qt Creator一般都没事,可以使用cout。因为Linux的编码一般都是utf8.

qDebug()的好处就是可以统一进行关闭,如果这个程序是要发布给用户的,可以通过编译开关,一键关闭。

小结

1.简单认识QLabel类,能够在界面上显示字符串。

通过setText来设置的,参数QString(Qt中把C++里的很多容器类,进行了重新封装)

2.内存泄漏和文件泄漏

3.对象树,qt推荐使用new的方式在堆上创建对象,通过对象树,统一释放对象,

创建对象的时候,在构造函数中,指定父对象,此时才能挂到对象树上。

4.通过Qt内置的类,就可以达到对现有控件进行功能扩展效果。

Qt的内置的QLabel,没法看到销毁过程,为了看清楚,就创建类MyLabel,继承自QLabel重写析构函数。就可以观察到对象的释放过程了。

也可以重写控件中的任何功能,不仅仅是析构函数,达到功能扩展目的。

# 基于图形化按钮输出hello word

信号和槽

connect()

这是QObject提供的静态函数,用来连接信号和槽。

    connect(ui->pushButton, &QPushButton::clicked, this, &Widget::handleClick);
     //谁发出的信号, 发出的什么信号,  谁来处理这个信号,  信号怎么处理
void Widget::handleClick()
{
    //当按钮被点击之后,就把按钮中的文本更换
    if(ui->pushButton->text() == QString("hello"))
    {
          ui->pushButton->setText("hello qt");
    }
    else
    {
              ui->pushButton->setText("hello");
    }

}

基于代码实现信号和槽

对于纯代码版本的,按钮对象是咱们自己new的,为了保证其他函数中能够访问到这个变量,就需要把按钮对象添加到widget的成员变量中。

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

    void handleClick();
private:
    Ui::Widget *ui;
    //添加成员变量
     QPushButton* myButton = new QPushButton(this);
};

而图形化操作,不需要new,new对象的操作,已经被Qt自动生成了

已经作为ui对象的一个成员变量了。也无需作为Widget的成员

实际开发中,这两种方法都会使用。

假如当前程序界面,界面内容比较固定,就会以图形化的1方式来构造界面。

但是你的程序界面要经常动态变化,就会以代码的方式来构造界面,

这两种方法还可以配合使用,不冲突。

Qt的命名规范

1.起名要有描述性

2.如果名字比较长,由多个单词构成,需要用适当的方式进行分词。

以下划线分割的叫做蛇形命名法。比如student_count.

Qt喜欢使用驼峰命名法。

比如:studentCount, QApplication。

首字母小写的叫做小驼峰。给变量、函数使用的话用小驼峰。

首字母大写的叫做大驼峰。给类使用的话是大驼峰。

Qt的快捷键

同名之间的.h和.hpp的切换:F4

生成函数声明的对应定义:alt+enter

查询文档:F1

Qt窗口坐标体系

坐标体系:以左上角为准,横轴是x轴,竖轴是y轴,但是这个y轴是朝下的。

计算机中的坐标系叫做左手坐标系。

坐标系原点(0,0)是屏幕的左上角,或者窗口的左上角

但是坐标系原点是相对于父窗口控件的。

button->move(200, 300); move函数就是移动按钮的位置的

坐标背后的单位:像素、

显示器的本质就是一大堆小灯泡小亮点构成的。

计算机中的坐标系叫做左手坐标系。

坐标系原点(0,0)是屏幕的左上角,或者窗口的左上角

但是坐标系原点是相对于父窗口控件的。

button->move(200, 300); move函数就是移动按钮的位置的

坐标背后的单位:像素、

显示器的本质就是一大堆小灯泡小亮点构成的。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

韶音运动耳机好用吗?南卡、墨觉、韶音骨传导耳机三款全面评测

音乐是我生活中不可或缺的调味品,它伴随着我度过了无数个清晨的慢跑以及夜晚的悠闲散步。但是传统入耳式耳机总是让我感到不适,虽然它有着不错的降噪能力,但是很容易忽视周围环境的安全,而且运动的时候老容易掉。然后我遇到了骨传…

新质生产力浪潮下,RPA如何成为助力先锋?

新质生产力浪潮下,RPA如何成为助力先锋? 在数字化、智能化的今天,“新质生产力”一词越来越频繁地出现在我们的视野中。那么,究竟什么是新质生产力?它与我们又有什么关系?更重要的是,在这一浪潮…

【动态规划】代码随想录算法训练营第四十六天 |139.单词拆分,关于多重背包,你该了解这些! ,背包问题总结篇!(待补充)

139.单词拆分 1、题目链接:. - 力扣(LeetCode) 2、文章讲解:代码随想录 3、题目: 给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词…

LeetCode:206.反转链表

206. 反转链表 解题过程 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val val; this.next next; …

【C++】C++学习前言

C前言与发展 一.什么是C二.C的发展史三.C的重要性 一.什么是C C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机, 20世纪…

2023年中国抗DDoS市场规模现状及竞争格局,公有云抗DDoS是主要增长点

分布式拒绝服务(DDoS)是在DoS基础之上产生的一种新的攻击方式,具有多对一的攻击模式。它通过制造伪造的流量,使得被攻击的服务器、网络链路或是网络设备(如防火墙、路由器等)负载过高,无法处理正…

NUMA架构

UMA架构 在单cpu的时代,cpu与内存的交互需要通过北桥芯片来完成。cpu通过前端总线(FSB, front Side Bus)连接到北桥芯片,由北桥芯片连接到内存(内存控制器是集成在北桥芯片里的)。为了提升性能,cpu的频率不…

2024中国(京津冀)太阳能光伏推进大会暨展览会

2024年中国(京津冀)太阳能光伏推进大会暨展览会是一个旨在促进太阳能光伏产业发展的重要会议和展览会。该活动将在中国的京津冀地区举行,旨在汇聚全球太阳能光伏领域的专业人士、政府代表、企业家和科研人员,共同探讨太阳能光伏技术的最新进展和未来发展…

PWARL CTF and others

title: 一些复杂点的题目 date: 2024-03-09 16:05:24 tags: CTF 2024年3月9日 今日习题完成: 1.BUU [网鼎杯 2020 半决赛]AliceWebsite 2.[RoarCTF 2019]Online Proxy 3.[Polar CTF]到底给不给flag呢 4.网鼎杯 2020 总决赛]Game Exp [RoarCTF 2019]Online Proxy …

适合上班族的副业:steam游戏搬砖1天3小时,月入8K

互联网新时代,做副业的人越来越多。如果能充分利用下班后的时间,还真能赚到不少钱。steam游戏搬砖项目就是这样一个非常适合上班的副业,只要用心去操作,一个月至少收入两三千,多的轻松上万。 steam游戏搬砖项目其实做的…

【NR 定位】3GPP NR Positioning 5G定位标准解读(十四)-DL-TDOA 定位

前言 3GPP NR Positioning 5G定位标准:3GPP TS 38.305 V18 3GPP 标准网址:Directory Listing /ftp/ 【NR 定位】3GPP NR Positioning 5G定位标准解读(一)-CSDN博客 【NR 定位】3GPP NR Positioning 5G定位标准解读(…

微信小程序(五十七)打开腾讯地图选择位置

注释很详细&#xff0c;直接上代码 前提配置看第五十四篇&#x1f427; 上一篇 新增内容&#xff1a; 1.使用地图选择位置的方法让用户重新选择大概的位置 2.留下经纬度接口以便于更新新的附近位置列表 源码&#xff1a; index.wxml <button bind:tap"chooseLocation…

java中的File

路径&#xff1a; 相对路径&#xff1a;相对路径是不带盘符的&#xff0c;它是相对于项目而言的 例如&#xff1a; “a.txt” “abc\a.txt” 绝对路径&#xff1a;绝对路径是带盘符的 &#xff0c;是相对于计算机而言。 例如&#xff1a; “C:\a.txt” “C:\abc\a.txt” Fil…

2024鸿蒙迎来大爆发,有必要转行鸿蒙开发吗?

鸿蒙开发&#xff0c;这个名字最近在科技圈引起了不小的轰动。 那么&#xff0c;鸿蒙开发到底是什么呢&#xff1f;它又能给我们带来怎样的影响呢&#xff1f; 鸿蒙开发&#xff0c;简单来说&#xff0c;就是基于鸿蒙操作系统的一种应用开发方式。鸿蒙系统&#xff0c;作为华为…

诗词生成之setting

先上代码&#xff1a; # 禁用词&#xff0c;包含如下字符的唐诗将被忽略 DISALLOWED_WORDS [&#xff08;, &#xff09;, (, ), __, 《, 》, 【, 】, [, ]] # 句子最大长度 MAX_LEN 64 # 最小词频 MIN_WORD_FREQUENCY 8 # 训练的batch size BATCH_SIZE 16 # 数据集路径 DA…

机器学习(选修)(持续更新)

Gradient Descent 1、一般我们会得到一组参数 &#xff0c;它是由很多组weight和bias组成的。 2、首先&#xff0c;我们在处理数据的时候&#xff0c;会选择一个初始化参数 3、其次&#xff0c;我们计算每个与w的偏微分&#xff0c;把他们组成矩阵的形式&#xff0c;如下图&…

C++ Qt开发:QNetworkAccessManager网络接口组件

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍如何运用QNetworkAccessManager组件实现Web网…

数字脉搏:互联网的演进与社会脉络

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的扑克牌识别软件(Python+PySide6界面+训练代码)

摘要&#xff1a;开发扑克牌识别软件对于智能辅助决策工具的建立具有关键作用。本篇博客详细介绍了如何运用深度学习构建一个扑克牌识别软件&#xff0c;并提供了完整的实现代码。该系统基于强大的YOLOv8算法&#xff0c;并对比了YOLOv7、YOLOv6、YOLOv5&#xff0c;展示了不同…

【网站项目】010新能源汽车在线租赁

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…
最新文章