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