【简单】使用ChatGPT和QT从零开始构建一个计算器应用

在这篇博文中,我将向大家展示如何使用ChatGPT和Qt来构建一个完整的计算器应用。我们将从零开始,逐步引导您完成整个项目,包括需求分析、软件设计、代码编写等环节。该项目代码全部由GPT编写,10分钟完成。

一,项目概述

本项目旨在使用ChatGPT和Qt技术构建一个功能完备的计算器应用。用户可以执行基本的算术运算,如加、减、乘、除,并且能够在界面上直观地展示输入的数字、运算符以及计算结果。

二,技术栈

在这个项目中,我们将使用以下技术和工具:

  • ChatGPT:作为我们的智能辅助,提供项目开发的指导和解答。
  • Qt 6.2:作为GUI开发框架,用于创建计算器应用的用户界面和交互逻辑。

三,项目实现

1. 需求分析

我们的计算器应用需要具备以下功能:

  • 输入数字
  • 执行加、减、乘、除等算术运算
  • 清除输入
  • 在界面上显示输入的数字、运算符和计算结果

2. 软件设计

根据需求分析,我们将创建两个类:MainWindowCalculator

MainWindow类

  • 成员变量:
    • QLineEdit *m_display:用于显示用户输入的数字、运算符和计算结果。
    • Calculator m_calculator:用于处理计算逻辑的计算器对象。
  • 成员函数:
    • setupUI():创建并设置主窗口的用户界面。
    • connectSignals():连接信号和槽函数,实现用户界面和计

算逻辑之间的交互。

  • onButtonClicked():处理数字按钮和运算符按钮的点击事件。
  • onClearButtonClicked():处理清除按钮的点击事件。
  • onEqualButtonClicked():处理等号按钮的点击事件。

Calculator类

  • 成员变量:
    • QString m_currentInput:当前用户输入的数字或表达式。
    • QString m_operator:当前运算符。
    • double m_firstNumber:第一个操作数。
    • double m_secondNumber:第二个操作数。
    • double m_result:计算结果。
  • 成员函数:
    • inputNumber(const QString &number):将数字输入到当前表达式中。
    • inputOperator(const QString &operatorSymbol):将运算符输入到当前表达式中。
    • calculate():执行计算逻辑,得到计算结果。
    • clear():清除当前输入和计算结果。
    • getCurrentInput() const:获取当前用户输入。
    • getResult() const:获取计算结果。

3. 代码运行结果

在这里插入图片描述

4. 代码编写

开源地址

代码地址https://gitee.com/clcmj/QtProject

代码

calculator.h

#ifndef CALCULATOR_H
#define CALCULATOR_H#include <QString>class Calculator {
public:Calculator();void inputNumber(const QString &number);void inputOperator(const QString &operatorSymbol);void calculate();void clear();QString getCurrentInput() const;QString getResult() const;private:QString m_currentInput;QString m_operator;double m_firstNumber;double m_secondNumber;double m_result;
};#endif // CALCULATOR_H

calculator.cpp

#include "Calculator.h"Calculator::Calculator(): m_currentInput(""), m_operator(""), m_firstNumber(0), m_secondNumber(0), m_result(0) {}void Calculator::inputNumber(const QString &number) {m_currentInput += number;
}void Calculator::inputOperator(const QString &operatorSymbol) {m_firstNumber = m_currentInput.toDouble();m_operator = operatorSymbol;m_currentInput.clear();
}void Calculator::calculate() {m_secondNumber = m_currentInput.toDouble();if (m_operator == "+") {m_result = m_firstNumber + m_secondNumber;} else if (m_operator == "-") {m_result = m_firstNumber - m_secondNumber;} else if (m_operator == "*") {m_result = m_firstNumber * m_secondNumber;} else if (m_operator == "/") {m_result = m_firstNumber / m_secondNumber;}
}void Calculator::clear() {m_currentInput.clear();m_operator.clear();m_firstNumber = 0;m_secondNumber = 0;m_result = 0;
}QString Calculator::getCurrentInput() const {return m_currentInput;
}QString Calculator::getResult() const {return QString::number(m_result);
}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QPushButton>
#include <QLineEdit>
#include "Calculator.h"class MainWindow : public QMainWindow {Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);private slots:void onButtonClicked();void onClearButtonClicked();void onEqualButtonClicked();private:void setupUI();void connectSignals();QLineEdit *m_display;Calculator m_calculator;
};#endif // MAINWINDOW_H

mainwindow.cpp

#include "MainWindow.h"
#include <QGridLayout>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) {setupUI();connectSignals();
}void MainWindow::setupUI() {QWidget *centralWidget = new QWidget(this);QGridLayout *gridLayout = new QGridLayout(centralWidget);m_display = new QLineEdit(centralWidget);gridLayout->addWidget(m_display, 0, 0, 1, 4);QStringList buttons {"7", "8", "9", "/", "4", "5", "6", "*", "1", "2", "3", "-", "C", "0", "=", "+"};for (int i = 1; i < 5; ++i) {for (int j = 0; j < 4; ++j) {QPushButton *button = new QPushButton(buttons[(i - 1) * 4 + j], centralWidget);button->setObjectName(buttons[(i - 1) * 4 + j]); // 添加这一行来设置对象名称button->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);gridLayout->addWidget(button, i, j);}}centralWidget->setLayout(gridLayout);setCentralWidget(centralWidget);
}void MainWindow::connectSignals() {for (auto button : findChildren<QPushButton *>()) {if (button->text() == "C") {QObject::connect(button, &QPushButton::clicked, this, &MainWindow::onClearButtonClicked);} else if (button->text() == "=") {QObject::connect(button, &QPushButton::clicked, this, &MainWindow::onEqualButtonClicked);} else {QObject::connect(button, &QPushButton::clicked, this, &MainWindow::onButtonClicked);}}
}void MainWindow::onButtonClicked() {QPushButton *button = qobject_cast<QPushButton *>(sender());if (button) {QString buttonText = button->text();QString currentDisplayText = m_display->text();if (currentDisplayText == m_calculator.getResult() && !m_calculator.getResult().isEmpty()) {// 如果当前显示结果,则清除以开始新计算currentDisplayText.clear();}if (buttonText == "+" || buttonText == "-" || buttonText == "*" || buttonText == "/") {m_display->setText(currentDisplayText + " " + buttonText + " ");} else {m_display->setText(currentDisplayText + buttonText);}}
}void MainWindow::onClearButtonClicked() {m_calculator.clear();m_display->clear();
}void MainWindow::onEqualButtonClicked() {QString currentDisplayText = m_display->text();QStringList tokens = currentDisplayText.split(' ');if (tokens.size() >= 3) {m_calculator.inputNumber(tokens[0]);m_calculator.inputOperator(tokens[1]);m_calculator.inputNumber(tokens[2]);m_calculator.calculate();m_display->setText(currentDisplayText + " = " + m_calculator.getResult());}
}

main.cpp

#include <QApplication>
#include "mainwindow.h"int main(int argc, char *argv[]) {QApplication app(argc, argv);MainWindow mainWindow;mainWindow.show();return app.exec();
}

总结

在本篇博文中,我们使用ChatGPT和Qt从零开始构建了一个计算器应用。通过需求分析、软件设计、代码编写和测试优化等阶段的逐步指导,我们成功实现了一个具备基本功能的计算器应用。希望这个项目能够帮助您更好地理解和应用ChatGPT和Qt技术,并激发您在GUI开发领域的创造力。如果您对本项目有任何疑问或建议,请随时提出,谢谢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/3412.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Flutter】Audioplayers 4.1.0 简要使用说明

文章目录 一、前言二、安装和设置三、基本使用1.创建 AudioPlayer 实例2.设置音频源3.控制播放 四、示例代码五、总结 一、前言 Audioplayers 是一个非常实用的 Flutter 插件&#xff0c;它可以帮助我们在 Flutter 应用中播放音频。无论你是想在你的应用中添加背景音乐&#x…

五、动画 - 旋转rotate

目录&#xff1a; 1.简介2.详解 一、 简介 通过旋转可以使元素沿着x, y,或者z选择指定的角度rotateX()rotateY()rotateZ()相关术语&#xff1a;45deg&#xff1a; 45度1turn 1圈&#xff0c; .5turn 半圈二、 详解 需求&#xff1a;在界面上定义一个box1, 放到视口中&#xff…

【Kubernetes资源篇】ConfigMap配置管理中心详解

文章目录 一、ConfigMap配置中心理论知识1、ConfigMap配置中心简介2、ConfigMap局限性 二、创建ConfigMap的四种方式1、第一种&#xff1a;通过命令行创建ConfigMap2、第二种&#xff1a;通过指定文件创建ConfigMap3、第三种&#xff1a;通过指定目录创建ConfigMap4、第四种&am…

kafka入门用这一篇就够了!

目录 1&#xff0c;kafka简单介绍 2&#xff0c;kafka使用场景 3&#xff0c;kafka基本概念 kafka集群 数据冗余 分区的写入 读取分区数据 顺序消费 提交策略 零拷贝技术&#xff08;netty&#xff09; 1&#xff0c;kafka简单介绍 kafka是一款分布式、支持分区的、多…

JS知识点汇总(五)--执行上下文

1. JavaScript中执行上下文和执行栈是什么&#xff1f; 1、执行上下文 执行上下文是一种对Javascript代码执行环境的抽象概念&#xff0c;也就是说只要有Javascript代码运行&#xff0c;那么它就一定是运行在执行上下文中 执行上下文的类型分为三种&#xff1a; 全局执行上…

CommonJS 和 ES6 module

本文主要自己觉得要记录的点记录下来,不耽误大家时间&#xff0c;会持续更新。 Module对象 Module {id: xxx/demo/1.js, //加载文件的绝对路径path: xxx/demo,// 加载文件所在目录的绝对路径exports: [Function (anonymous)],filename: xxx/demo/1.js,加载文件的绝对路径load…

【直播预告】HarmonyOS极客松赋能直播第三期:一次开发多端部署与ArkTS卡片开发

直播预约通道&#xff1a; 【直播预告】HarmonyOS极客松赋能直播第三期&#xff1a;一次开发多端部署与ArkTS卡片开发

点亮你的创意,使用Python与树莓派制作呼吸灯的详细教程

文章目录 前言PWM的介绍实现PWM控制LED亮度结果与分析 前言 在上一篇文章中&#xff0c;我们介绍了如何在树莓派上点亮一个LED灯&#xff0c;并让它以时间间隔为1秒进行闪烁。闪亮登场&#xff01;在树莓派上点亮LED灯的简单详细方法_☞黑心萝卜三条杠☜的博客-CSDN博客。现在&…

什么是组件,以及前端各种框架组件的使用方法

&#x1f642;博主&#xff1a;小猫娃来啦 &#x1f642;文章核心&#xff1a;介绍什么是组件&#xff0c;以及前端各种框架组件的使用方法 目录 什么是组件&#xff0c;请细看关键点 前端常用框架vue2框架的常用组件库vue3框架的常用组件库react框架的常用组件库微信小程序常用…

win系统安装配置minio笔记

win系统安装配置minio笔记 下载win64版本的minio.exe 可以去minio官网下载&#xff0c;也可以直接在csdn下载&#xff0c;这里提供一个下载地址 https://download.csdn.net/download/ThinkPet/87976200?spm1001.2014.3001.5501配置并启动minio.exe 可以在cmd命令里执行 m…

从零开始 Spring Boot 49:Hibernate Entity Lifecycle

从零开始 Spring Boot 49&#xff1a;Hibernate Entity Lifecycle 图源&#xff1a;简书 (jianshu.com) 本文将介绍 Hibernate 的 Session 接口&#xff0c;以及如何用 Session 的相关 API 转换实体&#xff08;Entity&#xff09;的生命周期状态。 如果缺少的 JPA 和 Hiberna…

如何将window文件夹挂载到VMware系统mnt目录

背景&#xff1a;项目开发过程中&#xff0c;通常是在Windows上编码&#xff0c;有些框架和软件只能够在Linux上面执行&#xff0c;如果在 VMware中的Linux上面开发不太方便&#xff0c;因此需要在Windows上面开发好再同步到Linux上面运行。 软件&#xff1a; Samba客户端 V…