【Qt】qt基础

目录

[一、使用Qt Creator创建qt项目](#一、使用Qt Creator创建qt项目)

二、项目文件解析

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

四、对象树


一、使用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等时不必包含其头文件。

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指针传入到创建的控件对象中。

相关推荐
程序猿_极客1 天前
【2025最新】 Java 入门到实战:数组 + 抽象类 + 接口 + 异常(含案例 + 语法全解析+巩固练习题)
java·开发语言·后端·java基础·java入门到实战
yzx9910131 天前
一个嵌入式存储芯片质量评估系统的网页界面设计
开发语言·javascript·ecmascript
树在风中摇曳1 天前
数据结构与算法基础入门 —— 从概念到复杂度理解
开发语言·c
是苏浙1 天前
零基础入门C语言之C语言实现数据结构之栈
c语言·开发语言·数据结构
后端小张1 天前
【JAVA 进阶】SpringBoot 事务深度解析:从理论到实践的完整指南
java·开发语言·spring boot·后端·spring·spring cloud·事务
y***54881 天前
C++在游戏引擎中的开发
开发语言·c++·游戏引擎
郝学胜-神的一滴1 天前
Python高级编程技术深度解析与实战指南
开发语言·python·程序人生·个人开发
charlie1145141911 天前
使用 Poetry + VS Code 创建你的第一个 Flask 工程
开发语言·笔记·后端·python·学习·flask·教程
Codeking__1 天前
查缺补漏c语言——c标准字符串函数
c语言·开发语言
rainbow_lucky01061 天前
Word-like编辑器
qt·编辑器·word-like