本文将以Qt 5/6(通用步骤,两者无核心差异)、Qt Creator开发工具为例,完成经典的Hello,World程序,包含纯代码编写和UI拖拽两种方式,步骤详细且适合零基础入门,确保每一步都能落地执行。
前置准备
1. 安装Qt开发环境:需包含Qt Creator编辑器、对应版本的Qt库(如5.15.2/6.6.0)、MinGW编译器(推荐,无需额外配置)。
2. 验证环境:打开Qt Creator,无报错弹窗即表示环境正常。
方式一:纯代码编写(控制台版Hello,World)
适合理解Qt的程序入口、工程结构,无图形界面,运行后在控制台输出文字。
步骤1:新建Qt控制台工程
1. 打开Qt Creator,点击文件(F) → 新建文件或项目(N)。
2. 在弹出的窗口中,选择项目 → Application → Qt Console Application,点击选择(C)。
3. 工程命名:输入 HelloWorld_Console (建议英文,无空格/中文),选择工程保存路径,点击下一步。
4. 构建套件选择:勾选已安装的MinGW(如MinGW 8.1.0 64-bit),点击下一步。
5. 类信息:默认类名 Main 、基类 QCoreApplication ,无需修改,点击下一步。
6. 点击完成,自动生成控制台工程结构。
步骤2:编写核心代码
工程生成后,自动打开 main.cpp 文件,替换原有代码为以下内容(注释已标注核心逻辑):
// 引入Qt核心头文件,QCoreApplication是控制台程序的核心类,处理应用程序事件循环
#include <QCoreApplication>
// 引入输入输出头文件,用于控制台打印(Qt的qDebug替代C++的cout,跨平台性更好)
#include <QDebug>
int main(int argc, char *argv[])
{
// 创建Qt应用程序对象,argc和argv是命令行参数,Qt程序必须有且仅有一个该对象
QCoreApplication a(argc, argv);
// 控制台输出Hello,World,qDebug()自动换行,无需加\n
qDebug() << "Hello,World!";
// 启动应用程序的事件循环(控制台程序可省略,此处为规范写法,兼容Qt语法)
return a.exec();
}
步骤3:运行程序
1. 点击Qt Creator左上角构建按钮(锤子图标),或按快捷键Ctrl+B,编译工程(底部编译栏显示 0 errors, 0 warnings 即编译成功)。
2. 点击运行按钮(绿色三角图标),或按快捷键Ctrl+R,底部应用程序输出栏将显示: Hello,World! ,控制台版程序完成。
方式二:图形界面版Hello,World(带窗口/文字)
更贴合Qt的GUI开发特性,生成带窗口的程序,窗口中显示Hello,World文字,包含纯代码创建界面和UI拖拽两种子方式,推荐新手先学UI拖拽,快速感受Qt的可视化开发。
子方式1:UI拖拽版(可视化开发,无复杂代码)
步骤1:新建Qt Widgets工程
1. 点击文件(F) → 新建文件或项目(N),选择项目 → Application → Qt Widgets Application,点击选择(C)。
2. 工程命名: HelloWorld_GUI ,选择保存路径,点击下一步。
3. 构建套件勾选MinGW,点击下一步。
4. 类信息配置(核心):
- 类名:默认 MainWindow (主窗口类,可自定义如 HelloWindow )。
- 基类:选择 QMainWindow (带菜单栏/工具栏的主窗口,新手推荐),也可选择 QWidget (空白基础窗口)。
- 勾选创建界面(必须勾选,否则无UI编辑界面),点击下一步。
5. 点击完成,生成图形界面工程,自动打开UI编辑界面(右侧为控件栏,中间为窗口画布,左侧为对象树)。
步骤2:UI拖拽添加文字控件
1. 右侧控件栏,找到Display Widgets(显示控件)分类,选择QLabel(标签控件,用于显示文字/图片)。
2. 按住QLabel拖拽到中间的窗口画布中,松开鼠标,画布中出现一个默认文字为 TextLabel 的标签。
3. 双击画布中的 TextLabel ,进入编辑模式,删除原有文字,输入 Hello,World! ,按回车确认。
4. 可选:拖动标签边缘调整大小,或在右侧属性编辑器中修改文字样式:
- font :设置字体、字号(如宋体,20号)。
- alignment :设置文字居中(水平+垂直居中)。
- styleSheet :设置文字颜色(如 color: red; )。
步骤3:直接运行程序
无需编写任何代码,直接点击构建(Ctrl+B) → 运行(Ctrl+R),将弹出一个带窗口的程序,窗口中显示设置好的 Hello,World! 文字,图形界面版完成。
子方式2:纯代码创建图形界面(理解Qt界面底层逻辑)
基于上述Qt Widgets工程,不使用UI拖拽,纯代码创建窗口和标签,步骤如下:
步骤1:新建Qt Widgets工程(取消UI)
1. 按上述方式新建 HelloWorld_GUI_Code 工程,在类信息步骤中,取消勾选创建界面,点击完成。
2. 工程生成后,核心文件为 mainwindow.h (头文件)、 mainwindow.cpp (实现文件)、 main.cpp (程序入口)。
步骤2:编写头文件(mainwindow.h)
打开 mainwindow.h ,添加QLabel的头文件引入和声明,代码如下:
cpp
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
// 引入QLabel头文件,使用标签控件
#include <QLabel>
class MainWindow : public QMainWindow
{
Q_OBJECT // Qt的元对象宏,必须有,支持信号与槽机制
public:
MainWindow(QWidget *parent = nullptr); // 构造函数
~MainWindow(); // 析构函数
};
#endif // MAINWINDOW_H
步骤3:编写实现文件(mainwindow.cpp)
打开 mainwindow.cpp ,在构造函数中创建QLabel并设置属性,代码如下:
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
// 1. 设置主窗口的标题和大小
this->setWindowTitle("Qt HelloWorld"); // 窗口标题
this->resize(400, 300); // 窗口大小:宽400像素,高300像素
// 2. 创建QLabel标签对象,父对象设为当前主窗口(自动随窗口显示/销毁)
QLabel *label = new QLabel(this);
// 3. 设置标签显示的文字
label->setText("Hello,World!");
// 4. 设置标签的大小和位置(x:100, y:100为左上角坐标,宽200,高50)
label->setGeometry(100, 100, 200, 50);
// 5. 可选:设置文字居中、字体
label->setAlignment(Qt::AlignCenter); // 文字水平+垂直居中
QFont font;
font.setFamily("宋体"); // 字体
font.setPointSize(20); // 字号
label->setFont(font);
}
MainWindow::~MainWindow()
{
// 父对象为MainWindow,Qt自动管理内存,无需手动释放label
}
步骤4:运行程序
构建(Ctrl+B)→ 运行(Ctrl+R),将弹出一个自定义标题、大小的窗口,窗口中显示居中的 Hello,World! 文字,纯代码图形界面完成。
核心知识点解析(新手必看)
1. Qt程序入口:所有Qt程序的入口都是 main() 函数,必须创建QApplication(图形界面)/QCoreApplication(控制台)对象,且仅有一个。
2. 事件循环: a.exec() 是Qt的事件循环入口,图形界面程序必须有,用于处理窗口的点击、刷新等事件;控制台程序可省略。
3. 跨平台性:上述代码无需修改,可在Windows、Linux、macOS上编译运行,Qt自动处理底层系统差异。
4. 内存管理:Qt中为控件设置父对象后,父对象销毁时会自动销毁子对象,无需手动 delete ,避免内存泄漏。
5. 核心头文件:
- QCoreApplication :控制台程序核心。
- QApplication :图形界面程序核心(继承自QCoreApplication,自动引入)。
- QLabel :标签控件,用于显示文字。
- QMainWindow/QWidget :窗口基类,所有图形界面都基于此。
常见问题排查
1. 编译报错 error: undefined reference to xxx :未勾选对应构建套件,或Qt库未正确安装,重新打开Qt维护工具安装对应库。
2. 运行无窗口/无输出:图形界面程序忘记创建应用程序对象,或未调用 exec() ;控制台程序未引入 QDebug 。
3. UI拖拽后运行无文字:未修改QLabel的默认文字,或控件被窗口边缘遮挡,调整控件位置。