QT入门
Qt介绍
Qt概述
Qt是由挪威Troll Tech公司出品的跨平台C++图形用户界面库(交互界面设计工具),但功能远超单纯的GUI工具包——它提供了覆盖多领域的跨平台开发模块,支持网络、数据库、OpenGL、Web技术、传感器、通信协议(蓝牙、串行端口、NFC)、XML/JSON处理、打印、PDF生成等场景。
Qt自带集成开发环境(IDE)Qt Creator,可运行在Linux、OS X和Windows系统,是Qt开发的核心工具。
补充:Qt核心优势
- 跨平台:一次编码,多平台部署(桌面、移动、嵌入式、物联网等)
- 模块化:丰富的内置模块,降低开发复杂度
- 易用性:支持可视化设计(Qt Designer)与代码开发结合
- 高性能:基于C++编写,兼顾效率与灵活性
- 生态完善:官方文档齐全,社区活跃,第三方资源丰富
Qt模块
Qt的API和库是其核心基础,分为基本模块(核心必备)和扩展模块(专业场景补充),覆盖从基础功能到高级开发的全需求。
基本模块(核心必备)
| 模块名称 | 功能描述 |
|---|---|
| QtCore | 供其他模块使用的非图形核心类(如信号槽、容器、线程、时间等基础功能) |
| QtGui | 图形用户界面组件的基类,包含OpenGL相关功能 |
| Qt Network | 简化网络编程,提供跨平台的网络通信接口(TCP/UDP、HTTP等) |
| Qt QML | 支持QML和JavaScript语言的类,以及对应的C++交互API |
| Qt Quick Dialogs | Qt Quick应用程序的系统对话框创建与交互类 |
| Qt Quick Layouts | 用于排列Qt Quick 2基于Item的界面元素,实现自适应布局 |
| Qt D-Bus | 基于D-Bus协议的进程间通信(IPC)类 |
| Qt Quick | 声明式语言框架,用于构建高度动态、自定义的用户界面(适合移动/嵌入式) |
| Qt Quick Controls | 为桌面/嵌入式/移动设备提供轻量级QML组件,样式架构简单,性能高效 |
| Qt Quick Test | QML应用程序的单元测试框架,测试用例以JavaScript函数编写 |
| Qt Test | 用于Qt应用程序和库的C++单元测试类 |
| Qt Widgets | 基于C++的传统Widget组件库,用于扩展Qt GUI(适合桌面应用) |
扩展模块(专业场景)
| 模块名称 | 功能描述 |
|---|---|
| Qt Digital Advertising | 嵌入式/移动端/桌面端数字广告创收的一体化开发解决方案 |
| Qt Multimedia | 音频、视频、收音机、摄像头等多媒体功能类 |
| Qt Multimedia Widgets | 基于Widget的多媒体功能扩展模块 |
| Qt 3D | 支持2D/3D渲染的近实时仿真系统,适用于3D可视化应用 |
| Qt Bluetooth | 提供蓝牙硬件访问接口,支持蓝牙设备通信 |
| Qt Serial Bus | 工业串行总线接口访问(支持CAN总线、Modbus协议) |
| Qt Serial Port | 硬件/虚拟串行端口访问接口 |
| Qt SQL | 数据库集成类,支持SQL语句操作各类数据库(MySQL、SQLite等) |
| Qt Charts | 数据可视化组件,支持静态/动态数据驱动的图表展示(折线图、柱状图等) |
| Qt MQTT | 机器对机器(M2M)通信协议,低开销数据传输(适合物联网场景) |
| Qt WebEngine | 基于Chromium的Web浏览引擎,支持在应用中嵌入网页(补充拓展) |
| Qt Location | 地理位置服务模块,支持地图显示、定位、路径规划(补充拓展) |
Qt应用场景
Qt应用覆盖70多个行业,是数百万设备和应用的底层技术,核心应用领域及目标平台如下:
按行业划分
- 汽车:创建统一的数字座舱用户体验
- 自动化:变革工业自动化策略与服务
- 消费类电子:为各类设备打造流畅的用户界面
- 医疗设备:开发确保患者安全的合规软件
- 补充行业:物联网、智能家居、工业控制、金融终端等(拓展)
按目标平台划分
- 桌面应用:Windows、Linux、macOS平台的可视化应用
- 移动设备:iOS、Android平台的随行应用与服务
- 嵌入式设备:精简网关、专用设备的GUI开发
- 微控制器(MCU):低性能硬件上运行高性能UI
- 物联网(IoT):跨设备的互联互通与数据展示
- 多屏幕/AR/VR:2D/3D、触屏交互的可扩展界面
补充:知名应用案例
- 桌面端:VirtualBox(虚拟机软件)、VLC播放器(部分功能)、WPS Office(Linux版本)
- 移动端:部分车载导航系统、工业控制终端APP
- 嵌入式:智能家电控制面板、医疗设备操作界面
Qt核心工具
Qt提供了一套完整的开发工具链,核心设计工具如下:
| 工具名称 | 功能描述 | 官网链接(用户自行补充) |
|---|---|---|
| Qt Designer | 基于Qt Widgets的GUI可视化设计工具,支持所见即所得(WYSIWYG),已集成到Qt Creator | 官网链接 |
| QMLLive | Qt Quick应用实时重加载环境,减少UI设计迭代的部署/测试时间 | 官网链接 |
| Qt Design Studio | 专注于动画用户界面的设计与开发环境,适合Qt Quick场景 | 官网链接 |
| Qt Shader Tools | 跨平台着色器管道工具,支持Qt Quick及其他组件的图形处理/计算着色器 | 官网链接 |
应用程序创建
新建项目步骤(Qt Creator操作)
步骤1:选择项目模板
- 打开Qt Creator,选择「新建项目」
- 模板分类:「Application」→「Qt Widgets Application」(带窗口的APP,含Qt Designer主窗口)
- 其他可选模板:Qt Console Application(无窗口)、Qt Quick Application(声明式UI)
- 点击「Choose...」进入下一步
步骤2:设置项目名称与路径
- 项目名称:自定义(示例:QT_1PojDemo)
- 项目路径:必须无中文、无空格(示例:D:\GZ2536\08-QT)
- 可选:勾选「设为默认的项目路径」
- 点击「下一步」
步骤3:配置类信息
- 类名(Class name):默认即可(示例:myWindow)
- 基类(Base class):默认「QMainWindow」(桌面应用常用)
- 自动生成文件:
- 头文件(Header file):mywindow.h
- 源文件(Source file):mywindow.cpp
- 表单文件(Form file):mywindow.ui(Qt Designer设计文件)
- 保持默认设置,点击「下一步」
步骤4:选择编译套件(Kit Selection)
- 勾选可用套件:Desktop Qt 5.14.2 MinGW 64-bit(必选,Windows平台编译核心)
- 其他套件:根据目标平台选择(如Android、iOS套件)
- 点击「下一步」
步骤5:项目总结与完成
- 确认项目配置信息无误
- 点击「完成」,生成项目结构(包含.pro文件、源码文件、UI文件)
项目配置关键说明
- .pro文件:项目配置文件,记录模块依赖、目标平台、编译选项等(如
QT += core gui widgets表示依赖核心模块) - 编译套件:MinGW 64-bit是Windows平台必选,用于编译生成可执行文件(.exe)
- UI文件(.ui):Qt Designer的可视化设计文件,编译时会自动转换为C++代码(ui_mywindow.h)
- 核心文件关系:mywindow.h(类声明)→ mywindow.cpp(类实现)→ mywindow.ui(界面设计)
补充:项目编译与运行
- 编译:点击Qt Creator工具栏「构建」按钮(或快捷键Ctrl+B)
- 运行:点击「运行」按钮(或快捷键Ctrl+R),需确保无编译错误
- 调试:设置断点后,点击「调试」按钮(或快捷键F5)
Qt Designer设计器功能
Qt Designer是可视化界面设计工具,集成在Qt Creator中,界面分为五大核心区域,支持拖拽组件、设置属性、关联信号与槽。
五大核心区域详解
区域1:窗口组件盒区域(左侧)
- 功能:提供所有内置UI组件,按类别划分,支持拖拽到编辑区
- 核心分类(7类):
- Layouts(布局):Vertical Layout(垂直布局)、Horizontal Layout(水平布局)、Grid Layout(网格布局)、Form Layout(表单布局)
- Spacers(间隔器):Horizontal Spacer(水平间隔)、Vertical Spacer(垂直间隔)
- Buttons(按钮):Push Button(普通按钮)、Tool Button(工具按钮)、Radio Button(单选按钮)、Check Box(复选框)、Dialog Button Box(对话框按钮组)
- Item View(基于视图的组件):List View、Tree View、Table View、Column View等
- Item Widget(基于部件的组件):List Widget、Tree Widget、Table Widget等
- Containers(容器):Group Box、Tab Widget、Stacked Widget等(用于分组或切换界面)
- Input Widget(输入组件):Line Edit(单行输入框)、Text Edit(多行输入框)、Spin Box(数值调节框)等
- Display Widget(显示组件):Label(标签)、Progress Bar(进度条)、LCD Number(数码管显示)等
区域2:编辑预览区域(中间)
- 功能:可视化编辑界面,所见即所得
- 操作:
- 拖拽组件到该区域,自动显示实际效果
- 选中组件后,可拖动边缘调节大小、拖动组件调整位置
- 右键组件可设置布局、添加菜单、关联信号与槽
- 支持缩放预览,测试不同分辨率下的界面适配
区域3:信号与槽编辑区域(底部/右侧)
- 功能:设置组件的信号(事件触发)与槽函数(响应逻辑)的关联
- 核心操作:
- 信号:组件触发的事件(如按钮的clicked(点击)、文本框的textChanged(文本变化))
- 槽函数:响应信号的函数(如按钮点击后执行的on_pushButton_clicked())
- 编辑方式:通过「Signals & Slots Editor」可视化关联,或手动编写代码关联
区域4:对象列表区域(右侧上)
- 功能:显示当前界面的所有组件对象,以及组件的父子层次关系
- 说明:
- 顶层对象:如QMainWindow(主窗口)、centralwidget(中心部件)
- 子对象:如按钮、标签等,隶属于顶层对象或容器组件
- 作用:快速选中组件(尤其当组件被遮挡时),查看组件归属
区域5:对象属性编辑区域(右侧下)
- 功能:查看并修改选中组件的属性,实时生效
- 常用属性说明:
属性名称 功能描述 objectName 组件唯一标识名(代码中通过该名称访问组件,如ui->pushButton) enabled 组件是否可用(true=可用,false=灰色不可点击) geometry 组件位置与大小(格式:[(x,y), 宽度×高度],x/y为相对于父组件的坐标) windowTitle 窗口标题(仅顶层窗口有效) text 组件显示文本(如按钮的「确定」、标签的「用户名:」) styleSheet 组件样式(支持CSS语法,如设置背景色、字体、边框等) sizePolicy 大小策略(如Preferred=优先自适应、Fixed=固定大小、Expanding=占满剩余空间) windowModality 窗口模态(NonModal=非模态,Modal=模态(阻塞父窗口))
常用设计器操作技巧
- 布局管理:选中多个组件,右键选择「布局」→「垂直布局」,组件会自动自适应排列,避免界面拉伸时错乱
- 组件对齐:使用工具栏的「对齐」按钮(左对齐、居中对齐、等间距分布)
- 样式设置:在属性编辑器的styleSheet中输入CSS样式,如
background-color: rgb(255,255,200); font-size: 14px;(浅黄色背景+14号字体) - 快捷键:Ctrl+Z(撤销)、Ctrl+Y(重做)、Ctrl+S(保存UI文件)、F4(切换UI文件与源码文件)
补充
Qt入门必备基础
- 编程语言:C++基础(类、继承、指针、引用),QML(可选,Qt Quick场景)
- 核心概念:信号与槽(Qt特有的事件响应机制,替代传统回调函数)
- 项目结构:理解.pro文件、头文件(.h)、源文件(.cpp)、UI文件(.ui)的关系
- 跨平台注意事项:避免使用平台相关API,文件路径用Qt提供的QDir类处理
Qt Creator常用快捷键
| 快捷键 | 功能描述 |
|---|---|
| Ctrl+N | 新建项目/文件 |
| Ctrl+O | 打开文件 |
| Ctrl+S | 保存文件 |
| Ctrl+B | 编译项目 |
| Ctrl+R | 运行项目 |
| F5 | 开始调试 |
| F10 | 单步调试(跳过函数) |
| F11 | 单步调试(进入函数) |
| Ctrl+/ | 注释/取消注释代码 |
| Ctrl+F | 查找文本 |
| Ctrl+Shift+F | 全局查找 |
| F4 | 切换.ui文件与.ui.h文件 |
| Alt+Enter | 快速修复代码错误(如添加头文件) |
入门常见问题排查
- 项目编译失败:
- 检查项目路径是否有中文/空格
- 确认编译套件(MinGW 64-bit)已正确选择
- 检查.pro文件是否添加必要模块(如
QT += widgets)
- 组件无法显示:
- 确认组件已添加到布局中,或设置了正确的geometry属性
- 检查组件的enabled属性是否为true
- 信号与槽关联失败:
- 确认信号和槽函数的参数类型匹配(如clicked()无参数,槽函数也需无参数)
- 检查组件的objectName是否正确(代码中访问时需与UI设计一致)
- 运行时崩溃:
- 避免访问空指针(如未初始化的组件指针)
- 检查数组/容器的索引是否越界

浙公网安备 33010602011771号