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()(转字符串)。
相关推荐
阿里嘎多学长9 小时前
2026-10-20 GitHub 热点项目精选
开发语言·程序员·github·代码托管
布吉岛的石头10 小时前
Java 程序员第 50 阶段2:预训练的目标函数:自回归语言建模本质
java·开发语言·人工智能·深度学习·回归·transformer
小羊没烦恼!10 小时前
铁道部新客票系统设计(二)
开发语言·前端·数据库·python·oracle·c#·php
quantdash_cc11 小时前
从实时行情到价格观察表:用 Python 和 Pandas 构建策略输入数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
昂好的day12 小时前
VisionMaster 通信模块实战(上):Modbus、TCP 收发、协议组装解析
开发语言·网络·网络协议·tcp/ip·c#
努力实干13 小时前
面向对象设计原则——C++
开发语言·c++·数码相机
NetX行者14 小时前
四语言 Hello World 背后:编译模型与运行时对比
开发语言
Pin_Qing15 小时前
账单没超,请求先被拒了
大数据·开发语言·人工智能
2601_9628857215 小时前
如何用 Python 计算 VaR 和 CVaR(在险价值)?
开发语言·python
郝亚军15 小时前
manifest 中 `sha256` 与 `signValue` 的作用
java·开发语言·数据结构