Qt 项目:计算圆面积

第一步:创建 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);
}

运行:

三、关键知识点(初学者重点)

  1. Q_OBJECT 宏:必须加在类声明中,否则 Qt 的信号槽机制失效(编译时需执行 moc 工具,Qt Creator 会自动处理)。
  2. 信号槽机制 :Qt 的核心通信方式,实现 "控件事件(按钮点击)→ 业务逻辑(计算)" 的解耦。
    • 旧写法(代码中):SIGNAL(clicked())/SLOT(onPushButtonClicked())(Qt4 风格);
    • 新写法(Qt5 + 推荐):&QPushButton::clicked, this, &Dialog::onPushButtonClicked(类型安全)。
  3. 布局管理器 :用QGridLayout(网格布局)自动排版控件,避免手动设置setGeometry(),适配不同窗口大小。
  4. 控件内存管理 :创建控件时指定父对象(this),Qt 会自动管理内存(父对象销毁时子控件也销毁),无需手动delete
  5. 数据类型转换 :Qt 的QString(字符串)和基本类型(int)的转换,用toUInt()(转无符号整数)、QString::number()(转字符串)。
相关推荐
xiaoye37081 小时前
某大厂java面试题二面20260313
java·开发语言·spring
Full Stack Developme1 小时前
Java -jar 命令 可以有哪些参数设置
java·开发语言·jar
( ⩌ - ⩌ )2 小时前
4.OpenGL纹理贴图
qt·opengl·纹理
独隅2 小时前
Python `with` 语句 (上下文管理器) 深度解析与避坑指南
开发语言·python
做怪小疯子2 小时前
Python 基础学习
开发语言·python·学习
denggun123452 小时前
结构化并发(Structured Concurrency)
开发语言·ios·swift
OKkankan2 小时前
红黑树的原理及实现
开发语言·数据结构·c++·算法
Bert.Cai2 小时前
Python time.sleep函数作用
开发语言·python
lxl13073 小时前
C++算法(11)字符串
开发语言·c++·算法