【简单】使用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.rhkb.cn/news/16635.html

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

相关文章

太突然了,不会ChatGPT就被淘汰,很多公司开始行动了!

上周末分别和两拨朋友约了饭局。周六约的是国内最大ERP厂商的朋友&#xff0c;饭桌上大家聊的最多的话题就是ChatGPT&#xff0c;他们上面领导发话了&#xff0c;让尽快引入ChatGPT&#xff0c;寻求突破。周日约见的是一波搞游戏开发的朋友&#xff0c;聊的最多话题也是ChatGPT…

ChatGPT 大浪潮下,哪些行业会被淘汰?

在 ChatGPT 大浪潮下&#xff0c;随着新技术的不断涌现和应用&#xff0c;一些传统行业或者是不适应发展节奏的行业可能会被淘汰。 我们先来看看&#xff0c;以下是可能受到影响的一些行业&#xff1a; 1、银行和金融行业&#xff1a;区块链技术的发展和数字货币的出现使得原本…

chatgpt赋能python:如何用Python打包项目不卡顿

如何用Python打包项目不卡顿 随着Python语言的普及和不断发展&#xff0c;越来越多的开发者选择使用Python作为主要的开发语言来开发应用程序。然而&#xff0c;许多Python开发者不知道如何打包他们的项目&#xff0c;或者他们打包后的项目存在性能问题。在本文中&#xff0c;…

告别卡顿困扰:IDEA 性能优化设置

大家好&#xff0c;我是老赵 在我们日常使用IDEA进行开发时&#xff0c;可能会遇到许多卡顿的瞬间&#xff0c;明明我们的机器配置也不低啊&#xff1f;为什么就会一直卡顿呢&#xff1f; 原来这是因为IDEA软件在我们安装的时候就设置了默认的内存使用上限&#xff08;通常很小…

chatgpt赋能python:Python卡顿怎么办?这里有十年经验告诉你

Python卡顿怎么办&#xff1f;这里有十年经验告诉你 Python是一种高级编程语言&#xff0c;并且是一种面向对象、动态类型的脚本语言。它在科学计算、爬虫、人工智能等领域有着广泛的应用。然而&#xff0c;有时在使用Python进行开发时&#xff0c;可能会遇到卡顿或运行缓慢的…

chatgpt 逐字输出 使用fetch/eventSource/fetchEventSouce进行sse流式处理

前端使用vue 1.逐字输出 闪动css样式 <span id"response_row" class"result-streaming">{{ item.assistantContent }}</span>.result-streaming:after {-webkit-animation: blink 1s steps(5, start) infinite;animation: blink 1s steps(5,…

【python】数据预处理:分位数归一化 Quantile Normalization + INSCODE AI创作助手测试

文章目录 写在前面标准化/归一化z-score标准化示例 python模块qnorm实现分位数归一化R代码实现分位数归一化分位数归一化 - NSCODE AI创作助手的回答*Q1&#xff1a;Quantile Normalization是什么&#xff1f;**Q2-1: 什么时候用Quantile normalization&#xff1f;**Q2-2: 什么…

解决Postman发起请求一直转圈加载没有反应的问题

问题描述 Postman像下面这样一直在发起请求&#xff0c;等待响应 可能的原因 路径写错了&#xff0c;找不到路径存在跨域问题 第一个问题很容易排查&#xff0c;这里说下第二个问题&#xff0c;跨域问题通常有两种解决方案&#xff0c;如下&#xff1a; (1)CORS技术 : 现…

vite首次打开界面加载慢问题/解决

写在前面 网上都说vite要比webpack快&#xff0c;但个人感受&#xff0c;默认情况下, vite项目的启动确实比webpack快&#xff0c;但如果某个界面是首次进入&#xff0c;且依赖比较多/比较复杂的话&#xff0c;那就会比较慢了。 这篇文章就是用来记录&#xff0c;关于vite慢的…

【机器学习 吴恩达】2022课程笔记(持续更新)

一、机器学习 1.1 机器学习定义 计算机程序从经验E中学习&#xff0c;解决某一任务T&#xff0c;进行某一性能P&#xff0c;通过P测定在T上的表现因经验E而提高 eg&#xff1a;跳棋程序 E&#xff1a; 程序自身下的上万盘棋局 T&#xff1a; 下跳棋 P&#xff1a; 与新对手下…

AutoCV番外:Transformer

目录 Transformer注意事项一、2023/5/16更新前言1. Self-attention1.1 前置知识1.2 Self-attention机制1.3 矩阵乘法角度理解1.4 Multi-head Self-attention1.5 Positional Encoding1.6 Many application 2. Transformer2.1 前置知识2.2 Encoder2.3 AT Decoder2.4 NAT Decoder2…

Transformer算法解读(self-Attention/位置编码/多头注意力/掩码机制/QKV/Transformer堆叠/encoder/decoder)

本文主要从工程应用角度解读Transformer&#xff0c;如果需要从学术或者更加具体的了解Transformer&#xff0c;请参考这篇文章。 目录 1 自然语言处理 1.1 RNN 1.2 Transformer 1.3 传统的word2vec 2 Attention 2.1 Attention是什么意思 2.2 self-Attention是什么 2…

AI|用过的AI工具都给你整理好了

AI&#xff5c;用过的AI工具都给你整理好了 最近两周冷静下来了&#xff0c;而且个人状况因为二阳有所影响&#xff0c;没有过多关注这些AI工具&#xff1b;前两天给公司伙伴分享的契机&#xff0c;整理了一下这两个月用过的一些AI工具&#xff0c;部分是日常工作也在使用的&a…

GPT提示词系统学习-第一课-你竟然想不到一个3位数乘法GPT会算错的原因

开篇 在我这个系统的开篇“GPT使我变成超人”中说过,什么样的人使用AI才是起到决定作用的。AI只是工具,它不是万能。使用的人决定了AI可以带什么样的效果。一个很强的人当使用GPT时会形成1+1>2的效果。 因此,提示词的系统化学习是非常重要。这一门课是任何目前国内市面…

【前沿技术】文心一言 PK Chat Gpt

目录 写在前面 一、文心一言 二、Chat GPT 三、对比 四、总结 写在前面 随着人工智能技术的不断发展和普及&#xff0c;越来越多的智能应用走入了人们的日常生活&#xff0c;如智能语音助手、智能客服、机器翻译等等。在这些应用中&#xff0c;自然语言生成&#xff08;…

【对比】文心一言对飚ChatGPT实操对比体验

前言 &#x1f34a;缘由 百度【文心一言】体验申请通过 本狗中午干饭时&#xff0c;天降短信&#xff0c;告知可以体验文心一言&#xff0c;苦等一个月的实操终于到来。心中这好奇的对比心理油然而生&#xff0c;到底是老美的【ChatGPT】厉害&#xff0c;还是咱度娘的【文心一…

ChatGLM ptuning 的实战方案

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

Vicuna-13B云服务器部署

Vicuna概述 Vicuna由一群主要来自加州大学伯克利分校的研究人员推出&#xff0c;仍然是熟悉的配方、熟悉的味道。Vicuna同样是基于Meta开源的LLaMA大模型微调而来&#xff0c;它的训练数据是来自ShareGPT上的7万多条数据&#xff08;ShareGPT一个分享ChatGPT对话的谷歌插件&am…

Chat-GLM 详细部署(GPU显存>=12GB)

建议配置: ( Windows OS 11 部署 )CPU-i7 13700F ~ 13700KF RAM: 16GB DDR4 GPU: RTX3080(12G) 安装 conda: 1. 下载安装 miniconda3 &#xff1a; https://docs.conda.io/en/latest/miniconda.html conda是一个包和环境管理工具&#xff0c;它不仅能管理包&#xff0c;还能隔…

“本草”大模型开源,ChatGPT时代,连AI私人医生都出现了?

大家好,我是千与千寻,也可以叫我千寻,今天给大家分享的ChatGPT新应用项目,是ChatGPT模型在医学领域的应用,什么,医学领域? 是的,没错,是医学领域的ChatGPT应用,我们都知道ChatGPT是OpenAI开源的一个智能对话式引擎,今天给大家分享的项目叫“本草”。 “本草”模型是…