news 2026/6/10 1:13:39

Qt学习第一个程序:Hello,World

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Qt学习第一个程序:Hello,World

本文将以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的默认文字,或控件被窗口边缘遮挡,调整控件位置。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/8 20:33:51

互联网大厂Java面试:严肃面试官与搞笑程序员的对决111

场景&#xff1a; 在某互联网大厂的面试室&#xff0c;一位严肃的面试官正准备提问&#xff0c;而对面坐着一位看似紧张却又想显得轻松的程序员小张。 面试官&#xff1a;我们先来聊聊Java核心知识。第一个问题&#xff0c;Java中的JVM是如何管理内存的&#xff1f; 程序员小张…

作者头像 李华
网站建设 2026/6/8 14:51:47

航空航天领域如何实现大文件秒传的解决方案总结?

最近做在做ePartner项目&#xff0c;涉及到文件上传的问题。 以前也做过文件上传&#xff0c;但都是些小文件&#xff0c;不超过2M。 这次要求上传100M以上的东西。 没办法找来资料研究了一下。基于WEB的文件上传可以使用FTP和HTTP两种协议&#xff0c;用FTP的话虽然传输稳定&a…

作者头像 李华
网站建设 2026/6/6 13:41:31

医院电子病历TinyMCE粘贴Word批注内容出现乱码怎么修复?

CMS企业官网编辑器扩展开发记录 需求分析与技术评估 作为上海的一名PHP全栈开发者&#xff0c;我最近接手了一个CMS企业官网的外包项目。客户提出了一项新需求&#xff1a;在TinyMCE 5编辑器中增加Office文档导入和一键粘贴功能。 核心需求点&#xff1a; 支持Word/Excel/P…

作者头像 李华
网站建设 2026/6/5 4:09:54

松下 PLC FP - XH 4 轴控制程序分享:双轴直线插补实战经验

松下plc FP-XH写的4轴控制程序&#xff0c;其中两个轴做直线插补&#xff0c;已经在12台设备上稳定运行&#xff0c;程序文件包含有plc程序触摸屏程序&#xff0c;设备电气图纸清单&#xff0c;还有设备的运行流程&#xff0c;能够帮助你很好的理解程序运行流程最近在项目中搞了…

作者头像 李华