使用Qt制作一个简易计算器

基于Qt,使用C++语言开发的一个简易计算器,包含了加减乘除四则运算。(仅适合初级学者学习)

widget.h 文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPushButton>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private slots:
    void on_okButton_clicked();

private:
    Ui::Widget *ui;
};

#endif // WIDGET_H

widget.cpp 文件

#include "widget.h"
#include "ui_widget.h"

#include <QDebug>
#include <QMessageBox>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::on_okButton_clicked()
{
/*
 * 只有加法运算
 * * * * * * * */
//    int firstNumber =  ui->firstNumberLineEdit->text().toInt();
//    int secondNumber = ui->secondNumberLineEdit->text().toInt();
//    int resultNumber = firstNumber + secondNumber;

//    ui->resultLineEdit->setText(QString::number(resultNumber));

/*
 * 加减乘除四则运算
 * * * * * * * * * * */
    int firstNumber =  ui->firstNumberLineEdit->text().toInt();
    int secondNumber = ui->secondNumberLineEdit->text().toInt();
    int resultNumber;

    if(ui->operationComboBox->currentIndex() == 0)
    {
        resultNumber = firstNumber + secondNumber;
        ui->resultLineEdit->setText(QString::number(resultNumber));
        QMessageBox::information(this,"Result",QString::number(resultNumber));
    }

    if(ui->operationComboBox->currentIndex() == 1)
    {
        resultNumber = firstNumber - secondNumber;
        ui->resultLineEdit->setText(QString::number(resultNumber));
        QMessageBox::information(this,"Result",QString::number(resultNumber));
    }

    if(ui->operationComboBox->currentIndex() == 2)
    {
        resultNumber = firstNumber * secondNumber;
        ui->resultLineEdit->setText(QString::number(resultNumber));
        QMessageBox::information(this,"Result",QString::number(resultNumber));
    }

    if(ui->operationComboBox->currentIndex() == 3)
    {
        if(secondNumber == 0)
        {
//            qDebug("分子不能为零!");
            QMessageBox::warning(this,"Error Message","Scond number can't be zero!");
        }else
        {
            resultNumber = firstNumber / secondNumber;
            ui->resultLineEdit->setText(QString::number(resultNumber));
            QMessageBox::information(this,"Result",QString::number(resultNumber));
        }
    }
}

源码:http://download.youkuaiyun.com/detail/u013383042/9409225
原创:http://blog.youkuaiyun.com/u013383042/article/details/50539777

<think>嗯,用户想用Qt Creator做一个简易计算器。好的,我得先理清楚步骤。首先,Qt Creator是跨平台的C++图形界面框架,对吧?所以需要安装Qt SDK,确保用户已经装好了。然后新建项目,选择Qt Widgets Application,这样可以用GUI组件。 接下来,界面设计部分。计算器通常有显示屏和按钮,所以需要一个QLineEdit或者QLabel来显示结果。按钮的话,数字0-9,加减乘除,等于,小数点,还有清除键。布局方面,网格布局比较合适,把按钮排列整齐。可能需要用QGridLayout来管理按钮的位置。 然后是逻辑部分。用户点击按钮时,数字应该显示在屏幕上,操作符需要暂存,等号时进行计算。这里可能需要处理连续输入的数字,比如输入12是1和2拼接成12。操作符需要记录前一个数字和当前操作,比如按下加号后,保存当前数字,清空输入,等待下一个数字输入,最后按等号时执行加法。 还要处理错误,比如除以零的情况,或者输入多个小数点。可能需要在代码中加入一些检查,比如一个数字只能有一个小数点。清除按钮可以重置所有变量和显示。 信号和槽的连接是关键,每个按钮的clicked信号连接到对应的处理函数。比如数字按钮连接到处理输入的槽,操作符按钮连接到设置操作的槽,等号按钮连接到执行计算的槽。 测试的时候要注意各种情况,比如连续操作,比如1+2*3应该怎么处理,不过简易计算器可能不考虑运算优先级,直接按顺序计算。或者用户可能希望有优先级,这需要明确说明。这里可能先实现顺序执行,避免复杂度。 代码结构方面,可能需要在主窗口类里定义私有变量,如currentInput, firstOperand, pendingOperator等。处理输入时更新currentInput,处理操作符时保存firstOperand和pendingOperator,等号时进行计算并显示结果。 最后打包发布,可能需要用Qt的部署工具来生成可执行文件,确保依赖项正确。 可能遇到的问题:布局不对齐,按钮大小不一,可以通过设置大小策略调整。或者信号连接错误,导致点击按钮没反应,需要检查连接是否正确。还有内存泄漏,但Qt的对象树管理应该能自动处理父对象的析构。 总结步骤:安装Qt,新建项目,设计界面,实现逻辑,连接信号槽,测试调试,打包发布。用户可能需要详细的代码示例,所以最好提供关键的代码片段,比如按钮点击处理和计算逻辑。</think>以下是通过Qt Creator制作简易计算器的分步指南: --- ### **一、环境准备** 1. 安装[Qt Creator](https://www.qt.io/download)(建议选择开源版本) 2. 新建项目:`File > New Project > Qt Widgets Application` --- ### **二、界面设计** 1. **添加显示框** - 拖拽`QLineEdit`控件到窗口顶部,作为计算结果显示区域 - 设置属性:`readOnly: true`(禁止直接输入) 2. **创建按钮布局** 使用`QGridLayout`排列按钮: ``` 7 8 9 ÷ 4 5 6 × 1 2 3 - 0 . = + C ← ( ) ``` --- ### **三、核心逻辑实现** #### **1. 定义成员变量(.h文件)** ```cpp private: QString currentInput; // 当前输入内容 double firstOperand; // 第一个操作数 QString pendingOperator; // 待执行的操作符 bool waitingForOperand; // 是否等待新操作数 ``` #### **2. 数字按钮槽函数** ```cpp void Calculator::onNumberClicked() { QPushButton *button = qobject_cast<QPushButton*>(sender()); currentInput += button->text(); ui->display->setText(currentInput); waitingForOperand = false; } ``` #### **3. 运算符处理** ```cpp void Calculator::onOperatorClicked() { QPushButton *button = qobject_cast<QPushButton*>(sender()); firstOperand = currentInput.toDouble(); pendingOperator = button->text(); waitingForOperand = true; currentInput.clear(); } ``` #### **4. 等于号计算** ```cpp void Calculator::onEqualClicked() { double secondOperand = currentInput.toDouble(); if (pendingOperator == "+") { currentInput = QString::number(firstOperand + secondOperand); } else if (pendingOperator == "-") { // 其他运算符类似处理 } ui->display->setText(currentInput); waitingForOperand = true; } ``` #### **5. 清除功能** ```cpp void Calculator::onClearClicked() { currentInput.clear(); firstOperand = 0; pendingOperator.clear(); ui->display->setText("0"); } ``` --- ### **四、信号槽连接** ```cpp // 连接数字按钮 connect(ui->btn0, &QPushButton::clicked, this, &Calculator::onNumberClicked); // 连接运算符 connect(ui->btnPlus, &QPushButton::clicked, this, &Calculator::onOperatorClicked); // 连接等号 connect(ui->btnEqual, &QPushButton::clicked, this, &Calculator::onEqualClicked); ``` --- ### **五、增强功能建议** 1. 添加错误处理(如除以零) 2. 支持键盘输入 3. 实现科学计算功能(三角函数、幂运算) 4. 添加历史记录功能 --- ### **六、最终效果** ![简易计算器界面](https://example.com/calculator-screenshot.png) (说明:实际运行时将显示标准计算器界面) --- ### **常见问题解决** 1. **按钮布局错乱** 调整`QGridLayout`的行列间距参数 2. **数字显示异常** 检查`QString`与`double`的转换逻辑 3. **连续运算错误** 确保在每次运算后重置`waitingForOperand`状态 需要完整代码示例可通过Qt官方文档获取,或参考GitHub上的开源计算器项目。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值