【qt计算器】

news/2025/2/26 22:06:52

qt计算器

  • 目录
      • 注释部分
      • 模块配置
      • 目标配置
      • 模板配置
      • 源文件配置
      • 头文件配置
      • UI 文件配置
      • 1. 头文件保护宏
      • 2. 包含必要的头文件
      • 3. 命名空间声明
      • 4. 类的定义
      • 5. 构造函数和析构函数
      • 6. 私有槽函数
      • 7. 私有成员变量
      • 8. 头文件保护宏结束
      • 1. 包含头文件
      • 2. 构造函数 `MainWindow::MainWindow(QWidget *parent)`
      • 3. 析构函数 `MainWindow::~MainWindow()`
      • 4. 按钮点击事件处理函数 `MainWindow::on_pushButton_clicked()`
      • 5. 文本编辑框 1 文本编辑事件处理函数 `MainWindow::on_lineEdit_1_textEdited(const QString &arg1)`
      • 6. 文本编辑框 2 文本编辑事件处理函数 `MainWindow::on_lineEdit_2_textEdited(const QString &arg1)`
      • 7. 下拉框当前文本改变事件处理函数 `MainWindow::on_comboBox_currentTextChanged(const QString &arg1)`
      • 总结

目录

注释部分

#-------------------------------------------------
#
# Project created by QtCreator 2025-02-19T14:23:43
#
#-------------------------------------------------

这是一段注释内容,表明该项目是由 Qt Creator 在 2025 年 2 月 19 日 14 时 23 分 43 秒创建的。注释在 .pro 文件中不影响实际的项目配置,主要用于提供一些说明信息。

模块配置

QT       += core gui
  • QT:是一个用于指定项目所需 Qt 模块的配置项。
  • +=:表示在原有模块的基础上追加新的模块。
  • core:是 Qt 的核心模块,提供了 Qt 框架的基础功能,如对象系统、事件循环、文件操作、字符串处理等。
  • gui:是 Qt 的图形用户界面模块,包含了创建图形界面所需的各种类和功能,像窗口、按钮、文本框等控件的相关类都在这个模块中。
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
  • greaterThan(QT_MAJOR_VERSION, 4):这是一个条件判断表达式。QT_MAJOR_VERSION 代表当前使用的 Qt 版本的主版本号,该表达式判断主版本号是否大于 4。
  • ::如果前面的条件成立,就执行后面的语句。
  • QT += widgets:如果 Qt 主版本号大于 4,就追加 widgets 模块。widgets 模块是 Qt 5 及更高版本引入的,提供了更多高级的图形界面组件和功能。

目标配置

TARGET = prj
  • TARGET:用于指定生成的可执行文件或库的名称。这里表示最终生成的可执行文件名为 prj

模板配置

TEMPLATE = app
  • TEMPLATE:指定项目的模板类型。app 表示这是一个应用程序项目,最终会生成一个可执行文件。除了 app,常见的模板类型还有 lib(用于创建库项目)等。

源文件配置

SOURCES += main.cpp\
        mainwindow.cpp
  • SOURCES:指定项目中包含的源文件列表。
  • +=:表示追加源文件。
  • main.cpp:通常是程序的入口文件,包含 main 函数,程序从这里开始执行。
  • mainwindow.cpp:是自定义主窗口类的实现文件,包含该类成员函数的具体实现代码。
  • \:是换行符,用于将较长的列表拆分成多行,方便阅读和编辑,表明下一行的内容也是该配置项的一部分。

头文件配置

HEADERS  += mainwindow.h
  • HEADERS:指定项目中包含的头文件列表。
  • +=:表示追加头文件。
  • mainwindow.h:是自定义主窗口类的头文件,包含该类的声明,如类的成员变量、成员函数的声明等。

UI 文件配置

FORMS    += mainwindow.ui
  • FORMS:指定项目中包含的 UI 文件列表。
  • +=:表示追加 UI 文件。
  • mainwindow.ui:是使用 Qt Designer 可视化设计的主窗口界面文件,通过该文件可以方便地设计窗口的布局和控件。

综上所述,这个 .pro 文件配置了一个名为 prj 的 Qt 应用程序项目,使用了 coregui
widgets 模块,包含 main.cppmainwindow.cpp 源文件、mainwindow.h 头文件以及
mainwindow.ui UI 文件。

这段代码是一个 Qt 项目中 MainWindow 类的头文件 mainwindow.h,下面为你逐行解释其含义。

1. 头文件保护宏

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

这是头文件保护机制,也称为预处理器守卫。其作用是防止头文件被重复包含,避免因重复定义导致的编译错误。当第一次包含该头文件时,MAINWINDOW_H 未被定义,因此会执行 #define MAINWINDOW_H 定义该宏,后续再次包含该头文件时,由于 MAINWINDOW_H 已被定义,#ifndef 条件不成立,头文件内容将被跳过。

2. 包含必要的头文件

#include <QMainWindow>

包含了 QMainWindow 类的头文件。QMainWindow 是 Qt 中用于创建主窗口的基类,它提供了菜单栏、工具栏、状态栏等常见主窗口元素的支持。

3. 命名空间声明

namespace Ui {
class MainWindow;
}

声明了一个名为 Ui 的命名空间,并在其中声明了 MainWindow 类。这个 Ui::MainWindow 类是由 Qt Designer 自动生成的,用于管理 mainwindow.ui 文件中设计的界面元素。

4. 类的定义

class MainWindow : public QMainWindow
{
    Q_OBJECT

定义了一个名为 MainWindow 的类,它继承自 QMainWindowQ_OBJECT 是一个宏,它是 Qt 元对象系统的核心部分,用于支持信号与槽机制、动态属性系统等高级特性。任何使用信号与槽机制的类都必须包含这个宏。

5. 构造函数和析构函数

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
  • explicit MainWindow(QWidget *parent = 0);:这是 MainWindow 类的构造函数。explicit 关键字用于防止隐式类型转换。parent 是一个指向父窗口的指针,默认值为 0(即 nullptr),表示该窗口没有父窗口。
  • ~MainWindow();:这是 MainWindow 类的析构函数,用于在对象销毁时进行资源清理工作。

6. 私有槽函数

private slots:
    void on_pushButton_clicked();

    void on_lineEdit_1_textEdited(const QString &arg1);

    void on_lineEdit_2_textEdited(const QString &arg1);

    void on_comboBox_currentTextChanged(const QString &arg1);
  • private slots:这是 Qt 中槽函数的声明区域。槽函数是一种特殊的成员函数,用于响应信号。
  • on_pushButton_clicked():当名为 pushButton 的按钮被点击时,该槽函数会被调用。
  • on_lineEdit_1_textEdited(const QString &arg1):当名为 lineEdit_1 的文本编辑框中的文本被编辑时,该槽函数会被调用,arg1 是编辑后的文本内容。
  • on_lineEdit_2_textEdited(const QString &arg1):当名为 lineEdit_2 的文本编辑框中的文本被编辑时,该槽函数会被调用,arg1 是编辑后的文本内容。
  • on_comboBox_currentTextChanged(const QString &arg1):当名为 comboBox 的下拉框中当前选中的文本发生变化时,该槽函数会被调用,arg1 是新选中的文本内容。

7. 私有成员变量

private:
    Ui::MainWindow *ui;

定义了一个私有成员变量 ui,它是一个指向 Ui::MainWindow 类对象的指针。这个指针用于访问 mainwindow.ui 文件中设计的界面元素,通过它可以在代码中操作界面上的各种控件。

8. 头文件保护宏结束

#endif // MAINWINDOW_H

结束头文件保护宏,与开头的 #ifndef MAINWINDOW_H#define MAINWINDOW_H 相对应。

综上所述,这个头文件定义了一个 MainWindow 类,它继承自
QMainWindow,包含构造函数、析构函数和一些用于处理界面元素事件的槽函数,同时使用 Ui::MainWindow
指针来管理界面元素。

这段代码是 mainwindow.cpp 文件,它实现了 MainWindow 类中声明的函数,主要功能是创建一个简单的计算器界面,处理界面上控件的交互事件并进行相应的计算。下面为你逐行详细解释:

1. 包含头文件

#include "mainwindow.h"
#include "ui_mainwindow.h"
  • #include "mainwindow.h":包含自定义的 MainWindow 类的头文件,其中声明了 MainWindow 类的成员函数和成员变量。
  • #include "ui_mainwindow.h":包含由 Qt Designer 自动生成的界面类的头文件,该文件中定义了 Ui::MainWindow 类,用于管理 mainwindow.ui 文件中设计的界面元素。

2. 构造函数 MainWindow::MainWindow(QWidget *parent)

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}
  • MainWindow::MainWindow(QWidget *parent):这是 MainWindow 类的构造函数定义。
  • QMainWindow(parent):调用基类 QMainWindow 的构造函数,将传入的父窗口指针 parent 传递给它。
  • ui(new Ui::MainWindow):使用 new 运算符动态创建一个 Ui::MainWindow 对象,并将其地址赋值给成员变量 ui
  • ui->setupUi(this):调用 Ui::MainWindow 对象的 setupUi 方法,将当前 MainWindow 对象 this 作为参数传入,该方法会将 mainwindow.ui 文件中设计的界面元素设置到当前窗口中。

3. 析构函数 MainWindow::~MainWindow()

MainWindow::~MainWindow()
{
    delete ui;
}
  • MainWindow::~MainWindow():这是 MainWindow 类的析构函数定义。
  • delete ui:释放之前在构造函数中动态分配的 Ui::MainWindow 对象的内存,防止内存泄漏。

4. 按钮点击事件处理函数 MainWindow::on_pushButton_clicked()

void MainWindow::on_pushButton_clicked()
{
    int line1 = ui->lineEdit_1->text().toInt();
    int line2 = ui->lineEdit_2->text().toInt();

    int line3;

    QString sFlag = ui->comboBox->currentText();
    if (sFlag == "+")
    {
        line3 = line1 + line2;
    }
    else if(sFlag == "-")
    {
        line3 = line1 - line2;
    }
    else if(sFlag == "*")
    {
        line3 = line1 * line2;
    }
    else if(sFlag == "/")
    {
        line3 = line1 / line2;
    }
    else
    {
        ui->lineEdit_3->setText("error");
        return;
    }

    QString str = QString::number(line3);
    ui->lineEdit_3->setText(str);
}
  • 当界面上的 pushButton 被点击时,该函数会被调用。
  • int line1 = ui->lineEdit_1->text().toInt();int line2 = ui->lineEdit_2->text().toInt();:从 lineEdit_1lineEdit_2 文本编辑框中获取用户输入的文本,并将其转换为整数类型。
  • QString sFlag = ui->comboBox->currentText();:从 comboBox 下拉框中获取当前选中的运算符。
  • 根据运算符进行相应的计算,并将结果存储在 line3 中。
  • 如果运算符不是 +-*/ 中的任何一个,则在 lineEdit_3 中显示 error
  • QString str = QString::number(line3);:将计算结果 line3 转换为字符串类型。
  • ui->lineEdit_3->setText(str);:将计算结果显示在 lineEdit_3 文本编辑框中。

5. 文本编辑框 1 文本编辑事件处理函数 MainWindow::on_lineEdit_1_textEdited(const QString &arg1)

void MainWindow::on_lineEdit_1_textEdited(const QString &arg1)
{
    int line1 = arg1.toInt();
    int line2 = ui->lineEdit_2->text().toInt();

    int line3 = line1 + line2;

    QString str = QString::number(line3);

    ui->lineEdit_3->setText(str);
}
  • lineEdit_1 文本编辑框中的文本被编辑时,该函数会被调用。
  • int line1 = arg1.toInt();:将编辑后的文本 arg1 转换为整数类型。
  • int line2 = ui->lineEdit_2->text().toInt();:从 lineEdit_2 文本编辑框中获取用户输入的文本,并将其转换为整数类型。
  • 计算 line1line2 的和,并将结果存储在 line3 中。
  • 将计算结果转换为字符串类型,并显示在 lineEdit_3 文本编辑框中。

6. 文本编辑框 2 文本编辑事件处理函数 MainWindow::on_lineEdit_2_textEdited(const QString &arg1)

void MainWindow::on_lineEdit_2_textEdited(const QString &arg1)
{
    int line1 = ui->lineEdit_1->text().toInt();
    int line2 = arg1.toInt();

    int line3 = line1 + line2;

    QString str = QString::number(line3);

    ui->lineEdit_3->setText(str);
}
  • lineEdit_2 文本编辑框中的文本被编辑时,该函数会被调用。
  • lineEdit_1 文本编辑框中获取用户输入的文本,并将其转换为整数类型。
  • 将编辑后的文本 arg1 转换为整数类型。
  • 计算 line1line2 的和,并将结果存储在 line3 中。
  • 将计算结果转换为字符串类型,并显示在 lineEdit_3 文本编辑框中。

7. 下拉框当前文本改变事件处理函数 MainWindow::on_comboBox_currentTextChanged(const QString &arg1)

void MainWindow::on_comboBox_currentTextChanged(const QString &arg1)
{
    int line1 = ui->lineEdit_1->text().toInt();
    int line2 = ui->lineEdit_2->text().toInt();

    int line3;

    QString sFlag = ui->comboBox->currentText();
    if (sFlag == "+")
    {
        line3 = line1 + line2;
    }
    else if(sFlag == "-")
    {
        line3 = line1 - line2;
    }
    else if(sFlag == "*")
    {
        line3 = line1 * line2;
    }
    else if(sFlag == "/")
    {
        line3 = line1 / line2;
    }
    else
    {
        ui->lineEdit_3->setText("error");
        return;
    }

    QString str = QString::number(line3);
    ui->lineEdit_3->setText(str);
}
  • comboBox 下拉框中当前选中的文本发生变化时,该函数会被调用。
  • lineEdit_1lineEdit_2 文本编辑框中获取用户输入的文本,并将其转换为整数类型。
  • 根据当前选中的运算符进行相应的计算,并将结果存储在 line3 中。
  • 如果运算符不是 +-*/ 中的任何一个,则在 lineEdit_3 中显示 error
  • 将计算结果转换为字符串类型,并显示在 lineEdit_3 文本编辑框中。

总结

这段代码实现了一个简单的计算器界面的交互逻辑,通过处理按钮点击、文本编辑和下拉框选择等事件,根据用户输入的数字和运算符进行相应的计算,并将结果显示在界面上。

在这里插入图片描述


http://www.niftyadmin.cn/n/5869213.html

相关文章

【ISP】畸变校正 LDC

ISP&#xff08;Image Signal Processor&#xff0c;图像信号处理器&#xff09;中的 LDC&#xff08;Lens Distortion Correction&#xff0c;镜头畸变校正&#xff09;是一种用于校正镜头畸变的图像处理技术。镜头畸变是由于镜头的光学特性导致的图像失真现象&#xff0c;主要…

GitHub 入门指南(2025最新版)

大家好&#xff0c;今日分享“GitHub 入门指南&#xff08;2025最新版&#xff09;” 一、账号与基础环境搭建 1. 注册账号 注册页面&#xff0c;如下所示&#xff1a; 访问https://github.com/&#xff0c;点击"Sign up"填写用户名、邮箱、密码完成注册&#xff…

spring中的注解介绍

本篇文章专门用来介绍spring中的各种注解。 1、RestController 1、含义 2、举例 3、使用场景 RestController 通常用于开发 RESTful API&#xff0c;适合返回 JSON 或 XML 数据的场景 4、总结 RestController 是 Spring 中用于简化 RESTful Web 服务开发的注解&#xff0c;它结…

【教程】使用docker+Dify搭建一个本地知识库

现在AI火的一塌糊涂&#xff0c;再不搭建一个自己的AI知识库就有点落伍了&#xff0c;这里我是自己的windows11电脑。用了dockerdifydeepseek。 一、安装docker 网址&#xff1a;https://www.docker.com/ 什么是docker&#xff1f; Docker 是一种开放源代码的容器化平台&…

百度觉醒,李彦宏渴望光荣

文 | 大力财经 作者 | 魏力 2025年刚刚开年&#xff0c;被一家名为DeepSeek的初创公司强势改写。在量化交易出身的创始人梁文锋的带领下&#xff0c;这支团队以不到ChatGPT 6%的训练成本&#xff0c;成功推出了性能可与OpenAI媲美的开源大模型。 此成果一经问世&#xff0c;…

CSS编程基础学习

1. CSS 简介 1.1. CSS概念及作用 HTML即超文本标记语言&#xff08;HyperText Markup Language&#xff09;&#xff0c;是网页制作的基础&#xff0c;通过HTML&#xff0c;开发者可以定义网页的标题、段落、链接、图像、列表、表格、表单等元素。引入CSS 可以针对 HTML 里的…

【Deepseek+Browser-Use搭建 Web UI自动化】

参考文档&#xff1a;browser-use WebUI DeepSeek V3 把浏览器整成自动化了!_browser use webui 执行run agent chrome没出来-CSDN博客 1、 安装完成&#xff1a; 三、安装步骤&#xff08;适用于macOs、windows、linux&#xff09; 1、拉取WebUI项目 git clone https://gi…

STM32开发方式

1.1 寄存器开发 学过51单片机的同学应该知道&#xff0c;51单片机教程都是讲解的寄存器开发&#xff0c;但是这种开发方式对于STM32就变得比较困难&#xff0c;因为STM32的寄存器数量是51单片机的十数倍如此多的寄存器根本无法全部记忆&#xff0c; 开发时需要经常的翻查芯片手…