第一步:创建 Qt 桌面应用项目(核心步骤)
1打开 Qt Creator,点击欢迎页的 New Project.
2在弹出的 "选择模板" 窗口中:
- 左侧列表选择 Application (应用程序)→ 右侧选择 Qt Widgets Application (Qt 桌面窗口应用,这是最基础的桌面程序模板)→ 点击 Choose...。

3项目基本信息设置:
- Name :填写项目名(比如
CircleAreaCalculator),建议用英文,不要有空格 / 中文。 - Create in :选择项目保存的路径(可以自己创建一个文件夹)→ 点击 Next。

4直接点下一步

5类信息设置(关键!决定程序基础结构):
- Class name :修改为
Dialog - Base class :下拉选择
QDialog(对话框基类,对应我们的需求)。 - 确保勾选
Generate form(是否生成 ui 文件,这里选取消勾选 ✅,因为我们要手动写代码创建界面,更适合初学者理解底层逻辑)。 - 其他保持默认 → 点击 Next。
6直接下一步

7构建套件(Kit)选择:
- 确保勾选你安装的 Qt 版本(比如
Desktop Qt 6.5.0 MinGW 64-bit)→ 点击 Next。(或者Select all kits)

8总结:没有问题点击完成

二、核心功能逐行拆解
1. main.cpp(程序入口)(了解)
cpp
#include "dialog.h" // 包含自定义对话框的头文件
#include <QApplication> // Qt应用程序的核心头文件
int main(int argc, char *argv[])
{
// 1. 创建QApplication对象:Qt程序必须有且仅有一个,管理程序的资源、事件循环
QApplication a(argc, argv);
// 2. 创建自定义的Dialog对话框对象
Dialog w;
// 3. 显示对话框(Qt控件默认隐藏,需调用show()显示)
w.show();
// 4. 启动应用程序的事件循环:等待用户操作(点击按钮、输入文字等),直到程序关闭
return a.exec();
}
2. dialog.h(类的声明)
cpp
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog> // 对话框基类
#include<QLineEdit> // 单行输入框控件(用于输入半径)
#include<QLabel> // 标签控件(用于显示提示文字、计算结果)
// 自定义Dialog类,继承QDialog,必须加Q_OBJECT宏(支持信号槽机制)
class Dialog : public QDialog
{
Q_OBJECT // 信号槽的核心宏,缺失会导致槽函数无法触发
public:
// 构造函数:parent=nullptr表示无父窗口(独立对话框)
Dialog(QWidget *parent = nullptr);
~Dialog(); // 析构函数
private slots:
// 槽函数声明:按钮点击后执行的函数(处理计算逻辑)
void onPushButtonClicked();
private:
// 成员变量:存储半径字符串(实际代码中未用到,可忽略)
QString m_strRadius;
QLineEdit* lineEditRedius; // 输入半径的输入框(指针)
QLabel* labelArea; // 显示面积结果的标签(指针)
};
#endif // DIALOG_H
3. dialog.cpp(类的实现)
cpp
#include "dialog.h"
#include <QLabel>
#include<QLineEdit>
#include<QGridLayout> // 网格布局(用于排版控件)
#include<QPushButton> // 按钮控件(触发计算)
const double PI = 3.1415926; // 圆周率常量
// 构造函数:创建界面控件、布局、信号槽连接
Dialog::Dialog(QWidget *parent)
: QDialog(parent) // 调用父类QDialog的构造函数
{
// ========== 1. 创建界面控件 ==========
QLabel* label1 = new QLabel(this); // 提示标签(父对象为this,自动管理内存)
label1->setText("请输入圆的半径:"); // 设置标签文字
lineEditRedius = new QLineEdit(this); // 半径输入框
labelArea = new QLabel(this); // 面积显示标签
labelArea->setText("0"); // 默认显示0
QPushButton* pushButtonCal = new QPushButton(this); // 计算按钮
pushButtonCal->setText("计算对应圆的面积"); // 按钮文字
// ========== 2. 布局管理:网格布局(QGridLayout) ==========
// Qt推荐用布局管理器排版控件(自动适配窗口大小),避免手动设置控件坐标
QGridLayout* mainLayout = new QGridLayout(this);
// addWidget(控件, 行, 列):把控件添加到网格的指定位置
mainLayout->addWidget(label1,0,0); // 第0行第0列:提示标签
mainLayout->addWidget(lineEditRedius,0,1); // 第0行第1列:半径输入框
mainLayout->addWidget(labelArea,1,0); // 第1行第0列:面积显示标签
mainLayout->addWidget(pushButtonCal,1,1); // 第1行第1列:计算按钮
this->setLayout(mainLayout); // 把布局设置给对话框(生效)
// ========== 3. 信号槽连接(Qt核心机制) ==========
// 格式:connect(发送者, 信号, 接收者, 槽函数)
// 按钮(pushButtonCal)发送clicked()信号 → 对话框(this)执行onPushButtonClicked()槽函数
connect(pushButtonCal,SIGNAL(clicked()),this,SLOT(onPushButtonClicked()));
}
Dialog::~Dialog() {} // 析构函数无逻辑(Qt自动释放子控件内存)
// 槽函数实现:计算圆的面积
void Dialog::onPushButtonClicked()
{
// 1. 获取输入框的文字(QString类型)
QString strRadius = lineEditRedius->text();
// 2. 把字符串转成无符号整数(半径)
int radius = strRadius.toUInt();
// 3. 计算面积:π * 半径 * 半径(注意:代码中变量名写错了,eara→area,不影响运行但不规范)
int eara = PI * radius * radius;
// 4. 把计算结果(整数)转成字符串(QString::number()是静态函数)
QString strArea = QString::number(eara); // 原代码写的strArea.number(eara)是错误的,会编译失败!
// 5. 把结果显示到标签上
labelArea->setText(strArea);
}
运行:

三、关键知识点(初学者重点)
- Q_OBJECT 宏:必须加在类声明中,否则 Qt 的信号槽机制失效(编译时需执行 moc 工具,Qt Creator 会自动处理)。
- 信号槽机制 :Qt 的核心通信方式,实现 "控件事件(按钮点击)→ 业务逻辑(计算)" 的解耦。
- 旧写法(代码中):
SIGNAL(clicked())/SLOT(onPushButtonClicked())(Qt4 风格); - 新写法(Qt5 + 推荐):
&QPushButton::clicked, this, &Dialog::onPushButtonClicked(类型安全)。
- 旧写法(代码中):
- 布局管理器 :用
QGridLayout(网格布局)自动排版控件,避免手动设置setGeometry(),适配不同窗口大小。 - 控件内存管理 :创建控件时指定父对象(
this),Qt 会自动管理内存(父对象销毁时子控件也销毁),无需手动delete。 - 数据类型转换 :Qt 的
QString(字符串)和基本类型(int)的转换,用toUInt()(转无符号整数)、QString::number()(转字符串)。