当前位置: 首页 > news >正文

QT入门基础

QT作为一个C++的GUI框架,编程语法和C++都差不多,上手还是比较快的。但是学习一个新的技术,总有一些新的概念是不清楚的,所以需要先了解一下这些概念。

1、QT软件系

  • QT:安装时会指定某个版本的QT,这个QT指QT库(类似SDK)
  • QT Creator:其实就是IDE,负责代码的编辑、调试、构建等
  • Qt Designer​​:独立的可视化UI设计工具,用于创建.ui文件。有了这个可以手动拖拽进行界面设计。

一般都是QT Designer设计UI界面生成ui文件,然后QT creator作为IDE进行代码编辑开发。如果使用visual studio开发QT,那么就可以不安装QT creator了,而是使用vs作为开发IDE。

2、构建工具

对于一个大型项目,一般的流程如下:

Qt 项目构建流程:
[源代码] ↓
[构建工具 (qmake / CMake)] → 生成 [编译指令] ↓
[编译器 (MSVC / MinGW)] → 生成 [可执行文件]

QT中构建工具有qmake和cmake两种,qmake是官方早期默认的构建工具,其基于.pro文件(即项目配置文件),简单易用适合小型或传统Qt项目。pro文件实例:

QT += core gui widgets  # 依赖的 Qt 模块
TARGET = MyApp          # 生成的可执行文件名
SOURCES += main.cpp     # 源代码文件
HEADERS += myclass.h    # 头文件
RESOURCES += res.qrc    # Qt 资源文件

CMake构建工具耳熟能详,也已被官方所支持,是现在Qt推荐的构建工具,在Qt6后开始默认支持,CMakeLists.txt示例:

cmake_minimum_required(VERSION 3.16)
project(MyQtApp)# 查找 Qt 6 核心模块
find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)# 添加可执行文件
add_executable(MyApp main.cpp)# 链接 Qt 库
target_link_libraries(MyApp PRIVATE Qt6::Core Qt6::Gui Qt6::Widgets)# 自动处理 moc、uic、rcc
set_target_properties(MyApp PROPERTIES AUTOMOC ON AUTOUIC ON AUTORCC ON)

切换两种构建工具非常简单,如果直接打开 .pro 文件,Qt Creator 会自动调用 qmake,直接打开 CMakeLists.txt,Qt Creator 会自动识别CMake。

3、编译工具

QT中常用的编译工具有两种:MSVC(Microsoft Visual C++)和MinGW(Minimalist GNU for Windows):

对比项MSVC (Microsoft Visual C++)MinGW (Minimalist GNU for Windows)
开发商微软GNU社区
许可证专有(社区版免费)开源(GPL)
编译器核心cl.exeg++.exe
运行时库MSVCRT.dlllibstdc++/libgcc
Windows支持深度优化,完全兼容通过MinGW-w64提供支持
跨平台性仅限Windows支持跨平台代码
性能优化Windows专属优化通用优化
典型用途Windows专业软件跨平台工具
安装复杂度需安装VS(体积大)独立安装(体积小)

4、开发套件(development kit)

Qt提供了多种构建、编译、调试等工具,选择一种搭配后就形成了所谓的开发套件。所以开发套件(Kit)​​ 就是指一组配置,用于定义如何构建和运行 Qt 项目。它主要包括 ​​Qt 版本、编译器、调试器​​ 等工具的组合。
一套源码可以使用多个开发套件进行编译,所以一个项目也可以有多个开发套件配置。

一个完整的 Qt 开发套件通常包含以下组件:

组件说明
Qt 版本指定使用的 Qt 库(如 Qt 5.15.2、Qt 6.5.1),不同版本可能支持不同模块。
编译器用于编译代码(如 MSVC、MinGW、GCC、Clang)。
调试器用于调试程序(如 GDB、CDB、LLDB)。
构建工具如 qmake 或 CMake,用于生成 Makefile 或 Ninja 构建文件。
目标设备指定运行平台(如 Windows、Linux、Android、嵌入式设备)。

【如何查看当前套件选择状态?】

5、安装

了解以上基本信息后,可以参考较为详细的QT安装教程:《【保姆级图文教程】最新Windows系统QT下载、安装、入门、配置VS Qt环境,图文详细、内容充实》进行安装。

安装成功后,可以打开MaintenanceTool(有软件图标或者在安装目标下的MaintenanceTool.exe)重新打开安装管理面板进行组件的添加、删除和升级,或卸载Qt。

在安装目录下的版本号文件夹内,是对于版本Qt的开发套件,Qt 库、头文件、版本特定的工具,总之是一些依赖版本的工具。
而Tools下安装的是一些工具软件,比如CMake、Qt Creator等不依赖具体版本的工具,比如Creator可以管理多个版本的Qt。

6、创建项目

创建项目后,会看到项目的组织结构书:

  • *.pro:使用qmake构建系统时的配置文件,包括项目的各种设置内容。
  • Headers分许:C++的头文件,默认有一个widget.h时窗口类的头文件
  • Sources分组:C++的源文件,默认有widget.cpp窗口类源码和main.cpp主函数源码
  • Forms分组:窗体ui文件,默认有一个widget.ui文件。双击ui文件会自动进入QT Designer中可视化设计界面

7、项目的构建、调试和运行

点击左侧Projects扳手图标,会切换到Projects设置界面。

在左侧Build&Run显示了所有的开发套件,选中某个套件的build选项后可以进行设置。在某套件的build设置页面有Shadow build狂,表示构建项目时在项目同级目录下创建一个输出文件夹,文件夹名为套件名+构建模式。这样的好处是使用多个套件build项目时会存放到不同的文件夹。所以只有一个开发套件构建时,则不需要勾选。

【待细节】

8、qmake配置文件

在创建项目时选择qmake构建工具,则项目会默认生成一个qmake的配置文件即.pro文件,qmake的常用配置:

变量含义
QT项目中使用的Qt模块列表
CONFIG项目的常规配置表,在用到某些模块时需要手动添加
DEFINES项目中的预处理定义列表,例如可以定义一些用于预处理的宏
TEMPLATE项目使用的模板,可以是应用程序(app)。如果不设置就默认为应用程序
HEADERS项目中的头文件(.h文件)列表
SOURCES项目中的源文件(.cpp文件)列表
FORMS项目中的UI文件(.ui文件)列表
RESOURCES项目中的资源文件(.qrc文件)列表
TARGET项目构建后生成的应用程序的可执行文件名称
DESTDIR目标可执行文件的存放路径
INCLUDEPATH项目用到其他头文件的搜索路径列表
DEPENDPATH项目其他依赖的头文件的搜索路径列表

当新添加文件时,qmake会自动更新配置文件,或者右键项目名点击Add Existing Files可以将已存在的文件添加到项目中。

9、main.cpp

作为整个程序的入口,其默认内容如下:

#include "mainwindow.h"  // 主窗口头文件(如果是Widgets项目)
#include <QApplication>   // Qt应用程序类int main(int argc, char *argv[])
{QApplication a(argc, argv);  // 创建Qt应用程序对象MainWindow w;                // 创建主窗口对象w.show();                    // 显示主窗口return a.exec();             // 进入主事件循环
}

QApplication类是管理整个Qt应用程序的生命周期和系统行为,处理事件循环(如鼠标点击、键盘输入、窗口重绘等)、解析命令行参数(argc, argv)、提供全局设置(如样式表、字体、本地化等)。每个 Qt GUI 程序必须有且只有一个 QApplication 对象(控制台程序用 QCoreApplication)。​​存活周期​​从程序启动到退出,贯穿整个运行过程。

MainWindow通常是应用程序的主界面窗口(继承自 QMainWindow),提供菜单栏、工具栏、状态栏等标准界面组件、管理子窗口或控件(如按钮、表格等)、处理用户与界面的交互逻辑等。

在顺序上, Qt的所有 GUI 操作(包括窗口创建、信号槽、样式表等)都依赖 QApplication 初始化底层系统资源,所以MainWindow必须在QApplication之后。其次a.exec()必须在最后,因为这是一个阻塞调用,比如在所有调用结束后再开始。

http://www.xdnf.cn/news/595207.html

相关文章:

  • python训练营打卡第31天
  • 【C++】控制台小游戏
  • 【人工智能】低代码基础技术讲解,规则引擎,在低代码平台上的作用,有哪些规则引
  • 前端请求状态出现CORS错误
  • CarPlay有线连接流程
  • 陕西安全员考试报名流程是怎样的?
  • 【Python3教程】Python3 文件(File)方法详解
  • 谷歌开源医疗领域多模态生成式AI模型:medgemma-4b-it
  • 完全禁用 Actuator 功能
  • 6个月Python学习计划 Day 1
  • Baklib企业知识中台AI实践
  • 2025年重庆水利水电安全员 A证考试精选题
  • Java设计模式
  • 爱博精电正式入驻京东平台,为客户提供更高效、便捷的采购体验
  • 结构型:装饰器模式
  • 项目开发中如何Git如何保持官方补丁更新
  • 工业物联网中隐私保护入侵检测的联邦学习增强型区块链框架
  • YOLOv11模型训练
  • Spring Ioc和Aop,Aop的原理和实现案例,JoinPoint,@Aspect,@Before,@AfterReturning
  • 如何使用小爱音响控制海尔等第三方平台设备
  • 从实验室到产业化:探究FSHD 技术发展史如何重塑显示行业格局?
  • 【物理学】声子:凝聚态物理中的关键概念
  • 视觉理解多模态模型转为API服务
  • 【Hexo】1.搭建本地初始默认的博客
  • 链表day4
  • 多线程初阶(3)
  • 数据表格控件TeeGrid for VCL/FMX:让数据“说话”更直观!
  • Android滑动冲突解决方法
  • 西交交互增强与细节引导的具身导航!OIKG:基于观察图交互与关键细节融合框架下的视觉语言导航
  • unittest