【簡単】ChatGPTとQTを使って電卓アプリをゼロから構築する

このブログ投稿では、ChatGPT と Qt を使用して完全な電卓アプリケーションを構築する方法を説明します。私たちはゼロから始めて、要件分析、ソフトウェア設計、コード記述、その他のリンクを含むプロジェクト全体を段階的にガイドします。プロジェクトのコードはすべて GPT によって書かれており、10 分で完了します。

1. プロジェクト概要

このプロジェクトは、ChatGPT と Qt テクノロジを使用して、完全に機能する電卓アプリケーションを構築することを目的としています。ユーザーは、加算、減算、乗算、除算などの基本的な算術演算を実行でき、入力された数値、演算子、計算結果をインターフェイス上で直感的に表示できます。

2. 技術スタック

このプロジェクトでは、次のテクニックとツールを使用します。

  • ChatGPT: インテリジェントなアシスタントとして、プロジェクト開発のためのガイダンスと回答を提供します。
  • Qt 6.2: GUI 開発フレームワークとして、電卓アプリケーションのユーザー インターフェイスと対話ロジックを作成するために使用されます。

3、プロジェクトの実現

1. 需要分析

電卓アプリケーションには次の機能が必要です。

  • データを入力する
  • 加算、減算、乗算、除算などの算術演算を実行します。
  • クリア入力
  • 入力した数値、演算子、計算結果をインターフェースに表示します

2. ソフトウェア設計

要件分析に従って、MainWindowと の2 つのクラスを作成しますCalculator

メインウィンドウクラス

  • メンバー変数:
    • QLineEdit *m_display: ユーザーが入力した数値、演算子、計算結果を表示するために使用されます。
    • Calculator m_calculator: 計算ロジックを処理するために使用される計算機オブジェクト。
  • メンバー関数:
    • setupUI(): メインウィンドウのUIを作成、設定します。
    • connectSignals(): 信号とスロット機能を接続してユーザーインターフェイスと計算を実装します

計算ロジック間の相互作用。

  • onButtonClicked(): 数字ボタンと演算子ボタンのクリック イベントを処理します。
  • onClearButtonClicked(): クリアボタンのクリックイベントを処理します。
  • onEqualButtonClicked(): 等号ボタンのクリックイベントを処理します。

電卓クラス

  • メンバー変数:
    • QString m_currentInput: ユーザーが入力した現在の数値または式。
    • QString m_operator: 現在のオペレーター。
    • double m_firstNumber: 最初のオペランド。
    • double m_secondNumber: 第 2 オペランド。
    • double m_result:計算結果。
  • メンバー関数:
    • inputNumber(const QString &number): 現在の式に数値を入力します。
    • inputOperator(const QString &operatorSymbol): 現在の式に演算子を入力します。
    • calculate(): 計算ロジックを実行し、計算結果を取得します。
    • clear():現在の入力と計算結果をクリアします。
    • getCurrentInput() const: 現在のユーザー入力を取得します。
    • getResult() const:計算結果を取得します。

3. コードの実行結果

ここに画像の説明を挿入

4. コードの書き方

オープンソースアドレス

コードアドレスhttps://gitee.com/clcmj/QtProject

コード

電卓.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

電卓.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);
}

メインウィンドウ.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

メインウィンドウ.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 開発の分野での創造性を刺激するのに役立つことを願っています。このプロジェクトについてご質問やご提案がございましたら、お気軽にお問い合わせください。ありがとうございました。

おすすめ

転載: blog.csdn.net/qq_43657810/article/details/131406797