【Qt】qt基础

news2024/12/16 18:02:25

目录

一、使用Qt Creator创建qt项目

二、项目文件解析

三、Qt中创建图形化界面的程序的两种方法

四、对象树

五、Qt中处理打印乱码问题的利器:qDebug()


一、使用Qt Creator创建qt项目

1.选择项目模板

选中第一类模板Application(Qt应用程序,包含普通窗体程序和QtQuick程序), 然后选中右侧的第一个子模版:Qt Widgets Application(普通窗体模板,基于部件的窗体界面程序)。

2.选择项目路径

 注意:qt项目所在的路径不能包含中文!

 3.选择构建系统

选中qmake。

qmake:是一个构建工具(build tool),支持跨平台构建,用于自动生成makefile文件。qmake用于编辑后缀为.pro的文件。

cmake:是一个跨平台构建工具,本身不是编译器。

4.选择qt项目中自动生成父类的类型

 

使用Qt Creator创建qt项目的中会自动生成一些代码,自动生成的代码中就包含一个类,此处就是选择该类的父类(Qt中内置的类)是什么。qt自动生成的父类默认有三种:

QMainWindow:主窗口类,表示一个完整的应用程序窗口。可以包含菜单栏、工具栏、状态栏等。

QWidget:最简单最基本的窗体程序,里面可以有多个控件实现程序功能。

QDialog:表示一个对话框。

上面三种类的关系:

QMainWindow和QDialog都是QWidget的派生类。

注意:Qt中内置的类都是以Q为前缀开头的。

二、项目文件解析

以qt自动生成的默认父类是Qwidget来分析:

后缀为.pro的文件:工程文件。工程新建好后,文件列表中有一个以.pro为后缀的文件,它是qmake自动生成的文件是用来生成makefile文件的。

widget.h:主要是声明Widget类(Widget类继承自QWidget),其中Widget类中的成员变量是命名空间Ui中的类,该类将在ui_widget.h中继承Ui_Widget类。

main.c:用于构造Widget类,并执行其相应的方法。

widget.cpp:用于实现Widget类(实现构造函数、析构函数、其他成员函数)该文件会包含头文件"widget.h"和"ui_widget.h"。注意:在Widget类的构造函数中创建控件对象。

widget.ui:其实是一个xml文件,qt会根据UI设计器中的控件帮我们在该文件中生成相应的内容。

ui_widget.h:该文件中包含类Ui_Widget的声明和定义,当我们通过拖拽控件生成图形界面时,比如拖拽了一个Label控件,然后此时widget,ui文件就会生成相应的Label控件的信息,在编译期间,qt会根据widget.ui中关于Label控件的信息在ui_widget.h中生成关于该Label控件的代码,然后执行生成图形化界面。

三、Qt中创建图形化界面的程序的两种方法

这里创建一个简单的Label控件。

1.直接使用C++代码的方式创建界面。

Qt中一些容器的头文件基本都被内置,当我们使用QString,QVector(封装C++中的容器类)等时不必包含其头文件。

2.使用图形化方式。通过form file(也就是使用Qt Designer拖拽控件的方式或直接在Qt Creator中修改.ui文件来生成图形界面)。

.ui文件其实是一个xml格式文件qmake在编译期间根据这个xml文件会在ui_widget.h文件中生成生成一些C++代码,从而构造出完整的图形界面。

四、对象树

上面我们在堆上new了一个Label类但是没有释放空间,会造成内存泄露吗?答案是不会的。

在Qt中的对象树会把我们在堆上new的各个控件组织起来,目的是为了把这些控件对象的生命周期由对象树统一管理,统一释放这些控件。

如果在栈上创建控件对象那么就会导致对象提前销毁,当main.c中要执行w.show(),此时w的构造函数执行完毕,在栈上创建的控件对象已析构销毁,无法显示该Label控件内容。

注意:new对象的时候一定要将this指针传入到创建的控件对象中,这样才可以将该控件挂在对象树上。

验证对象树是否会自动释放它组织的控件对象:

我们现在要自己创建一个MyLabel类该类继承自QLabel类,并且MyLabel类的析构函数里有打印信息的代码,用以验证MyLabel是否析构。

新建一个qt项目:TestObjectTree

然后在该项目中让qt帮我们生成一个继承自QLabel的类:

 

然后将这个继承自QLabel的类挂到对象树上:

 当我们运行程序会生成一个窗体控件,该窗体控件(其实就是QWidget类)里面有标签控件的内容,然后我们关闭该窗体控件,终端就会打印出MyLabel类对象析构函数中的内容,因此证明由对象树组织的控件会被统一释放。

五、Qt中处理打印乱码问题的利器:qDebug()

在qt中当我们使用C++中的打印中文时,会出现乱码问题。这是由于字符编码一致导致的。

常见的字符编码集:

GBK:一个汉字占2个字节(Windows下的默认字符编码集)。

UTF-8/utf8:一个汉字一般占3个字节(Linux下的默认字符编码集)

在vs2019中,使用的是Windows下的默认字符编码集GBK:

在Windows环境下qDebug()可以处理字符编码集不同导致的乱码问题,因此在qt中我们以后就使用qDebug()输出日志/或打印信息,而不是使用cout。

在Linux中开发Qt程序时也可以使用cout,因为Linux默认字符编码集是utf8和qt相同。

注意:使用qDebug()时要包含头文件#include <QDebug>

使用qDebug()还有一个好处就是打印的调试日志可以统一关闭或打开。

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

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

相关文章

Transformer入门(6)Transformer编码器的前馈网络、加法和归一化模块

文章目录 7.前馈网络8.加法和归一化组件9.组合所有编码器组件构成完整编码器 7.前馈网络 编码器块中的前馈网络子层如下图所示&#xff1a; 图1.32 – 编码器块 前馈网络由两个带有ReLU激活函数的全连接层组成。全连接层&#xff08;Fully Connected Layer&#xff09;有时也…

AI智算-k8s部署大语言模型管理工具Ollama

文章目录 简介k8s部署OllamaOpen WebUI访问Open-WebUI 简介 Github&#xff1a;https://github.com/ollama/ollama 官网&#xff1a;https://ollama.com/ API&#xff1a;https://github.com/ollama/ollama/blob/main/docs/api.md Ollama 是一个基于 Go 语言开发的可以本地运…

HTML/CSS总结

HTML 1.1 标题标签h 为了使网页更具有语义化&#xff0c;我们经常会在页面中用到标题标签&#xff0c;HTML提供了6个等级的标题&#xff0c;即 标题标签语义&#xff1a; 作为标题使用&#xff0c;并且依据重要性递减 其基本语法格式如下&#xff1a; <h1> 标题文本…

信号处理:概念、技术、领域

目录 基本概念 主要技术 应用领域 信号处理是一个涉及分析、修改和再生信号的多学科领域。信号可以是各种形式的&#xff0c;例如声音、图像、视频或其他类型的监测数据。信号处理的主要目标是提取有用的信息并增强信号的质量。以下是信号处理的一些基本概念和应用&#xff…

黑盒白盒测试

任务1 黑盒测试之等价类划分法 【任务需求】 【问题】例&#xff1a;某报表处理系统要求用户输入处理报表的日期&#xff0c;日期限制在2003年1月至2008年12月&#xff0c;即系统只能对该段期间内的报表进行处理&#xff0c;如日期不在此范围内&#xff0c;则显示输入错误信息…

深度学习物体检测之YOLOV5源码解读

V5比前面版本偏工程化,项目化,更贴合实战 一.V5版本项目配置 (1)整体项目概述 首先github直接查找yolov5&#xff0c;下载下来即可。在训练时&#xff0c;数据是怎么处理的&#xff1f;网络模型架构是怎么设计的(如各层的设计)&#xff1f;yolov5要求是大于python3.8与大于等…

Go 怎么做性能优化芝麻开门篇

一、性能优化的流程 我们在对某个功能&#xff08;或单个接口&#xff09;做性能优化的时候。一般是该功能&#xff08;或接口&#xff09;性能无法满足我们的业务要求&#xff0c;所以被迫优化。在开始优化之前&#xff0c;我们需要明白一些理论知识。 1、常见的性能优化指标…

【Elasticsearch入门到落地】4、Elasticsearch的安装

接上篇《3、es与mysql的概念对比》 上一篇我们学习了Elasticsearch与Mysql的概念与区别。本篇我们来进行Elasticsearch的环境准备及软件安装。 一、环境准备 如果我们没有自己的Linux服务器&#xff0c;且现在正在使用的是Windows操作系统的电脑&#xff0c;那么首先我们需要安…

CRYPTO密码学

加解密算法/编码 哈希算法SM3SHA-3base家族GBGB18030GB2312GBKutf家族恺撒二进制分区法unicodeASCIIDSADSSCRC32校验对称非对称gbk编码h264SEA初探smc动态代码保护四方密码曼彻斯特编码剖析基本概念什么是编码?什么是加密与解密寻找银弹-有没有无法破解的密码通过Java代码入门…

我们来学mysql -- 探讨win安装方式(安装篇)

题记 书接上回&#xff0c;在我们来学mysql – 闲聊(安装篇)中&#xff0c;拿到安装包&#xff0c;当宝贝一样揣在怀里 然而&#xff0c;还没捂热乎&#xff0c;得粉丝秘报&#xff0c;U哥&#xff0c;上篇文章用了滞后的官方文档&#xff0c;哈哈哈…内心的小倔强&#xff0c…

pip 如何快速安装包

一、问题描述 当使用Python通过pip安装一些包时&#xff0c;pip默认是访问的国外的源&#xff0c;但在国内访问又是异常的慢&#xff0c;而且还经常因为网络问题导致安装失败&#xff0c;比如下面通过pip install jupyter来安装jupyter Notebook&#xff0c;这网速真的超级慢&…

CodeBook-Ubuntu-sandbox Linux 沙箱服务 docker pull

CodeBook-Ubuntu-sandbox Linux 沙箱服务 开源技术栏 这是一个多用户的 Linux SSH 服务沙箱&#xff0c;支持启动时动态加载用户列表&#xff0c;并可随时更新用户信息。每个用户仅能修改自己目录下的文件&#xff0c;确保了环境的安全性和隔离性。 目录 文章目录 CodeBook-…

【echarts】数据过多时可以左右滑动查看(可鼠标可滚动条)

1. 鼠标左右拖动 在和 series 同级的地方配置 dataZoom&#xff1a; dataZoom: [{type: inside, // inside 鼠标左右拖图表&#xff0c;滚轮缩放&#xff1b; slider 使用滑动条start: 0, // 左边的滑块位置&#xff0c;表示从 0 开始显示end: 60, // 右边的滑块位置&#xf…

【数据分享】2014-2024年我国POI兴趣点数据(免费获取/来源于OSM地图)

POI是Point of Interest的简称&#xff0c;意为“兴趣点”&#xff0c;是互联网电子地图中用于表示特定位置的地理实体的核心数据类型。POI通常用于标注具体地点&#xff0c;例如餐厅、商场、学校、医院、景点等。这些数据以点的形式呈现&#xff0c;并附带详细属性信息&#x…

使用html和JavaScript实现一个简易的物业管理系统

码实现了一个简易的物业管理系统&#xff0c;主要使用了以下技术和功能&#xff1a; 1.主要技术 使用的技术&#xff1a; HTML: 用于构建网页的基本结构。包括表单、表格、按钮等元素。 CSS: 用于美化网页的外观和布局。设置字体、颜色、边距、对齐方式等样式。 JavaScript…

SSM 垃圾分类系统——高效分类的科技保障

第五章 系统功能实现 5.1管理员登录 管理员登录&#xff0c;通过填写用户名、密码、角色等信息&#xff0c;输入完成后选择登录即可进入垃圾分类系统&#xff0c;如图5-1所示。 图5-1管理员登录界面图 5.2管理员功能实现 5.2.1 用户管理 管理员对用户管理进行填写账号、姓名、…

ip_done

文章目录 路由结论 IP分片 数据链路层重谈Mac地址MAC帧报头局域网的通信原理MSS&#xff0c;以及MAC帧对上层的影响ARP协议 1.公司是不是这样呢? 类似的要给运营商交钱&#xff0c;构建公司的子网&#xff0c;具有公司级别的入口路由器 2&#xff0e;为什么要这样呢?? IP地…

排序算法(5):归并排序

问题 排序 [30, 24, 5, 58, 18, 36, 12, 42, 39] 归并排序 归并排序采用分治法&#xff0c;将序列分成若干子序列&#xff0c;每个子序列有序后再合并成有序的完整序列。 在数组排序中&#xff0c;如果只有一个数&#xff0c;那么它本身就是有序的。如果有两个数&#xff0…

uniapp打包apk教程

文章目录 一、uniapp是什么&#xff1f;二、使用步骤1.需要有Java环境&#xff0c;安装jdk2.安装hbuilderx开发工具3.自签证书4.使用云打包 总结 一、uniapp是什么&#xff1f; ‌uni-app是一个基于Vue.js的跨平台应用开发框架&#xff0c;允许开发者使用一套代码同时构建iOS、…

Titanic - Machine Learning from Disaster————泰坦尼克号幸存者预测————逻辑回归、随机森林和梯度提升树(XGBoost、LightGBM)

目录 1. 引言 2. 理解 Titanic 数据集 目标变量 数据的初步探索 3. 数据预处理 3.1 处理缺失值 3.2 处理类别型特征 3.3 创建新特征 3.4 删除无关特征 3.5 确保所有特征都是数值型 4. 模型选择与训练 4.1 数据集拆分 4.2 选择和训练模型 4.2.1 逻辑回归模型 4.2…