【QT】Qt从零入门指南:创建你的第一个GUI程序

Qt简介

Qt是一个跨平台的C++图形用户界面应用程序开发框架,由挪威Trolltech公司于1991年开发,现由The Qt Company(前身为Digia的Qt事业部)维护。它广泛应用于桌面、移动和嵌入式系统开发,支持Windows、Linux、macOS、Android、iOS等主流操作系统。

Qt开发环境

1. 开发套件组成

Qt开发套件包含:

  • Qt库(核心框架)

  • Qt Creator IDE

  • 编译器工具链

  • 调试器

  • 构建工具(qmake/CMake)

2. 集成开发环境(IDE)选择

Qt Creator(推荐)

  • Qt官方专用IDE,开箱即用

  • 内置可视化设计器(Qt Designer/Qt Quick Designer)

  • 完美支持Qt特性,无需额外配置

  • 适合初学者和Qt专业开发者

  • 注意:社区版可能存在一些小问题,但更新频繁

Visual Studio

  • 功能强大,适合大型C++项目

  • 需安装"Qt Visual Studio Tools"扩展(微软维护)

  • 商业项目中较常见,特别是Windows平台项目

  • 有预编译包简化配置

其他IDE

  • CLion:通过CMake支持Qt开发

  • VSCode:通过插件支持,配置较复杂

  • Eclipse:市场份额下降,仍有部分嵌入式开发者使用

3. 环境安装建议

初学者推荐方案:

  1. 下载Qt在线安装器(Qt Online Installer)

  2. 选择最新稳定版本

  3. 组件选择:

    • Qt Creator(必选)

    • MinGW编译器(Windows)

    • Qt核心模块

    • 示例和文档

Windows用户注意:

  • MinGW:开源GCC编译器,适合学习和小项目

  • MSVC:微软编译器,性能更好,适合商业项目

  • 可同时安装多个编译器版本

安装验证:

安装完成后,打开Qt Creator,创建默认的Widgets Application项目,能成功编译运行即表示环境配置正确。

4. 开发工作流程

  1. 创建项目:Qt Creator向导创建Qt Widgets或Qt Quick项目

  2. 界面设计:使用设计器拖拽或编写QML代码

  3. 编写逻辑:C++业务逻辑实现

  4. 构建运行:一键编译调试

  5. 发布部署:Qt自带部署工具

第一个程序

设计流程

在我们写第一个QT程序之前,我们先来熟悉一下QT开发的流程:

1.新建项目

点击New Project

2.选择模板

在这里我选择Qt Widgets Application作为模板。Qt Widgets Application是 Qt 框架中用于开发传统桌面图形界面应用程序的模板:

1.它基于 Qt Widgets 框架(Qt 的经典 UI 组件库)

2.支持通过拖放控件(如按钮、文本框)快速构建界面(使用 Qt Designer 可视化设计工具)

3.自动生成包含窗口的界面文件(.ui)和 C++ 代码文件(.cpp/.h)

4.采用界面与业务逻辑分离的设计模式,便于初学者理解和使用

为什么推荐初学者优先选择这个模板?

  1. 成熟稳定:作为 Qt 最成熟的开发模板,拥有最丰富的学习资源(教程多,资料多
  2. 原生体验:开发的应用程序能完美适配 Windows/macOS/Linux 系统风格(可移植
  3. 学习门槛低:
    • 可视化界面设计,减少 UI 代码编写
    • C++ 业务逻辑清晰直观
    • 特别适合开发办公工具、本地客户端等传统桌面软件

Qt Quick Application:用 "Qt Quick/QML" 框架,适合做炫酷的现代界面(比如手机 App、动画多的桌面端),但需要学 QML 语言,入门稍复杂。

Qt Console Application:无界面的控制台程序(只有命令行窗口),适合写纯逻辑的工具(比如后台脚本)。

3.命名,路径

在Qt Creator中创建新项目时,命名需遵循以下规范:

  1. 仅允许使用:字母、数字和下划线
  2. 必须以字母或下划线开头
  3. 禁止包含:空格、中文字符、特殊符号及连字符

创建路径时,路径名不要有中文。

4.构建系统选择

1. 新手推荐:qmake

优势说明: qmake作为Qt官方构建工具,与Qt Creator开发环境完美兼容。创建项目后仅需点击"运行"按钮即可自动完成编译过程,完全免除了复杂的配置工作。其配置文件(.pro)采用简洁直观的语法结构,特别适合作为Qt初学者的首选构建方案。

2. 其他选项适用场景

CMake

跨平台通用构建系统,适用于大型项目多语言混合开发 (如Qt + C++ + Python)。虽然功能强大,但配置文件(CMakeLists.txt)相对复杂,建议新手暂缓使用。

Qbs

Qt推出的新一代构建工具,编译速度优于qmake。但目前生态成熟度不及qmake和CMake,主流项目仍以前两者为主,而且用的人很少公司也没有怎么维护了。

总结:新手直接选择qmake即可,点击"下一步"继续。

5.父类选择

在Base Class(父类)选项中,需要选择主窗口的Qt Widgets基类类型。不同基类提供不同的窗口功能特性,具体说明如下:

QMainWindow详解

  • 带有菜单栏、工具栏和状态栏的主窗口基类
  • 适用于开发完整的桌面应用程序(如文本编辑器、浏览器等需要完整菜单系统的程序)

QWidget

  • 作为所有Qt控件的基类
  • 提供一个空白窗口(无菜单/工具栏)
  • 适合创建简单弹窗或自定义小控件

QDialog

  • 专为对话框设计的基类
  • 适用于临时交互窗口(如登录窗口、设置对话框)
  • 默认以模态方式运行(会阻止主窗口操作)

结构对比

  • QMainWindow包含:

    • 菜单栏(QMenuBar)
    • 工具栏(QToolBar)
    • 停靠窗口(QDockWidget)
    • 状态栏(QStatusBar)
    • 中央部件(Central Widget)
  • QWidget仅是一个空白画布,可以手动添加所需功能(更好上手)

学习路径建议

  1. 从QWidget开始:掌握基本布局和信号槽机制
  2. 学习QDialog:理解模态/非模态对话框
  3. 进阶QMainWindow:构建完整应用程序框架

对于初学者,建议直接选择QWidget作为父类进行基础学习。我们在这里选择QWidget,作为父类。

QT 基类一经选定,系统便会自动生成对应的头文件(.h)和源文件(.cpp),并预填充基础代码框架。对于初次接触 C++框架的开发者而言,这种自动化功能尤为便利 ----它免去了手动编写所有文件的繁琐过程,大大提升了开发效率。

6.国际化和本地化

我们保持默认就行。

7.编译环境选择

编译器我们选择MinGW(GCC for Windows) 安装的什么版本就选什么版本(我的是6.10.1)。如果以后要使用Visual Studio来开发可以选Microsoft Visual C++ 2022 ,它是微软官方推出的专业编译器(VS用的就是这个)。

Debug

包含完整调试信息,执行效率较低,支持调试功能,适用于开发阶段,生成的文件体积较大。

Release

经过优化编译,运行效率高,不支持调试,适用于产品发布,生成的文件体积较小。

性能分析版本Profile

包含性能分析数据,主要用于性能优化,初学者可暂不关注。

我们在这里选择Debug就行。

8.项目结构和设置版本控制

这一页是项目创建的总结页面,我们默认就行。

9.完成

到这里我们的项目就创建完了。且构建工具帮我们生成.h文件和.cpp文件和部分代码。

实现程序

QT事项程序有两种方式:1.图形化2.纯代码

图形化

双击widget.ui,我们会进入这个面板。

点击左侧的display Widgets中的Label

直接拖动到设计界面

双击就可以标签内容了

点击左下角的运行图标,并等待构建完成。

这样,我们就用QT实现了第一个程序

纯代码实现

关闭所有项目和程序,重复上述步骤创建一个新项目test2。

更改widget.cpp

cpp 复制代码
#include "widget.h"
#include "ui_widget.h"
#include<QLabel>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    QLabel* label = new QLabel(this);//指向父节点
    label->setText("hello world!");
}

Widget::~Widget()
{
    delete ui;
}

直接运行

这样我们就通过纯代码的方式实现了程序。本文就到这里,下篇文章将解释为什么传this指针,为什么new这个对象没有手动释放内存以及各个文件的内容和联系。

相关推荐
Scott9999HH5 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
码智社6 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海6 小时前
python 列表、元组、集合和字典
开发语言·python
萧瑟余晖7 小时前
JDK 26 新特性详解
java·开发语言
马优晨7 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
人邮异步社区9 小时前
怎么把C语言学到精通?
c语言·开发语言
心平气和量大福大10 小时前
C#-WPF-控件-TextBox 数据绑定
开发语言·c#·wpf
ttwuai10 小时前
Cursor 生成 CRUD 后,Go 后台接口别只测 200:JWT、RBAC 和 tenant_id 怎么验
开发语言·后端·golang
এ慕ོ冬℘゜10 小时前
前端基础:什么是时间戳?JS获取时间戳三种方法与实战用途
开发语言·前端·javascript
执明wa10 小时前
LayoutInflater详解: XML是如何变成View的?
android·xml·开发语言·android studio