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

这篇具有很好参考价值的文章主要介绍了【简单】使用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. 代码运行结果

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

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_OBJECT

public:
    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开发领域的创造力。如果您对本项目有任何疑问或建议,请随时提出,谢谢!文章来源地址https://www.toymoban.com/news/detail-511804.html

到了这里,关于【简单】使用ChatGPT和QT从零开始构建一个计算器应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 从零开始,搭建一个简单的UVM验证平台(四)

    UVM前置基础: 1.UVM基础-factory机制、phase机制 2.UVM基础-组件(driver、monitor、agent...) 3.UVM基础-TLM通信机制(一) 4.UVM基础-TLM通信机制(二) ...还在更新 从零搭建一个UVM验证平台: 从零开始,搭建一个简单的UVM验证平台(一) 从零开始,搭建一个简单的UVM验证平台(二) 从

    2023年04月14日
    浏览(44)
  • 【Go Web 篇】从零开始:构建最简单的 Go 语言 Web 服务器

    随着互联网的迅速发展,Web 服务器成为了连接世界的关键组件之一。而在现代编程语言中,Go 语言因其卓越的性能和并发能力而备受青睐。本篇博客将带你从零开始,一步步构建最简单的 Go 语言 Web 服务器,让你对 Go 语言的 Web 开发能力有一个初步的了解。 在选择一门语言

    2024年02月11日
    浏览(39)
  • 【ChatGPT】从零开始构建基于ChatGPT的嵌入式(Embedding) 本地(Local) 智能客服问答机器人模型

      目录 方案流程 1. Embeddings 介绍 术语:微调 vs 嵌入

    2024年02月10日
    浏览(39)
  • 使用C语言构造一个简单计算器

    本节我们用小学生知识来制作一个简单的计算器,可以运算加,减,乘,除,以及余数的运算。 在这节代码中用到switch语句,因为要输入运算符,所以注意%c的对应 接下来上代码: 这里的话我们简单演示一下乘法的运算: 如果用其他的计算符号直接更改即可,这里使用双精

    2024年02月12日
    浏览(36)
  • 使用 JavaScript 创建一个简单的计算器

    介绍: JavaScript 是一种广泛应用于网页开发的脚本语言,它具有灵活、动态和强大的特性。本文将演示如何使用 JavaScript 创建一个简单的计算器,并实现基本的加减乘除操作。 正文: javascript 解释: 以上代码是一个简单的 HTML 页面,其中包括两个输入框和四个按钮,用于实

    2024年02月03日
    浏览(42)
  • 如何使用Python从零开始构建游戏

    作者:禅与计算机程序设计艺术 游戏开发是一个庞大的领域,其涉及到许多领域如数学、计算机图形学、音视频等等,本文只讨论游戏编程,不涉及到其他相关领域知识。 游戏编程可以分成以下几步: 游戏逻辑 渲染 物理引擎 AI 用户交互 游戏中可能会用到不同的技术或框架

    2024年02月08日
    浏览(31)
  • 从零开始搭建游戏服务器 第一节 创建一个简单的服务器架构

    由于现在java web太卷了,所以各位同行可以考虑换一个赛道,做游戏还是很开心的。 本篇教程给新人用于学习游戏服务器的基本知识,给新人们一些学习方向,有什么错误的地方欢迎各位同行进行讨论。 本篇教程预计使用Java+Redis+Mongo 本着先完成再完美的原则,从最简单的

    2024年02月10日
    浏览(41)
  • 用python从零开始做一个最简单的小说爬虫带GUI界面(3/3)

    目录 上一章内容 前言 出现的一些问题 requests包爬取小说的不便之处 利用aiohttp包来异步爬取小说 介绍 代码 main.py  test_1.py test_3.py 代码大致讲解 注意 系列总结 用python从零开始做一个最简单的小说爬虫带GUI界面(2/3)_木木em哈哈的博客-CSDN博客 前一章博客我们讲了怎么通过

    2024年02月11日
    浏览(28)
  • 用python从零开始做一个最简单的小说爬虫带GUI界面(2/3)

    目录 前一章博客 前言 主函数的代码实现 逐行代码解析 获取链接 获取标题 获取网页源代码 获取各个文章的链接 函数的代码 导入库文件 获取文章的标题 获取文章的源代码 提取文章目录的各个文章的链接 总代码 下一章内容 用python从零开始做一个最简单的小说爬虫带GUI界面

    2024年02月11日
    浏览(30)
  • 用python从零开始做一个最简单的小说爬虫带GUI界面(1/3)

    目录 下一章内容 PyQt5的配置  设置软件的快捷启动方式 1.        用于设计界面的程序 2.        将Qt Designer设计出来的ui文件转化为py文件 3.        可以把py文件打包成可执行的exe文件 4.        将ico图片放在qrc文件中,再将qrc文件转换成py文件,用于小工具的图

    2024年02月12日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包