初学QT简单计算器

思路:
1.新建一个widget工程
2.在ui界面选择好自己需要的组件(这里选择2个label用于显示计算的结果和运算符号,16个pushButton按钮用于显示按键)
3.利用两个全局整数代表计算的前一个数据和后一个数据
4.利用信号与槽机制设置好点击按钮以后在label界面显示的数据
ui界面如图:
注意:最上面有两个label组件,第一个用于显示运算符号,第二个用于显示运算数据,且只支持整数运算
代码如下:
widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
    QString ch;

private slots:
    void on_button1_clicked();

    void on_button2_clicked();

    void on_button3_clicked();

    void on_button4_clicked();

    void on_button5_clicked();

    void on_button6_clicked();

    void on_button7_clicked();

    void on_button8_clicked();

    void on_button9_clicked();

    void on_button0_clicked();

    void on_buttonclear_clicked();

    void on_buttonjia_clicked();

    void on_buttonjian_clicked();

    void on_buttoncheng_clicked();

    void on_buttonchu_clicked();

    void on_buttondeng_clicked();

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <QString>

int first=0;    //用于显示计算的前一个数据
int second=0;   //用于显示计算的前一个数据

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    this->setWindowTitle("计算器");
    ui->label->setAutoFillBackground(true);//设置自动填充背景
    ui->label->setPalette(QPalette(QColor(Qt::white)));//设置调色板
    ui->label_2->setAutoFillBackground(true);//设置自动填充背景
    ui->label_2->setPalette(QPalette(QColor(Qt::white)));//设置调色板
}

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


void Widget::on_button1_clicked()
{
    second=second*10+1;//second原本为0按下一个按键以后计算其值
    ch=QString::number(second);//将计算的值转为字符串(因为label只能显示字符串)
    ui->label->setText(ch);//将字符串显示在label组件里面
}


void Widget::on_button2_clicked()
{
    second=second*10+2;
    ch=QString::number(second);
    ui->label->setText(ch);
}


void Widget::on_button3_clicked()
{
    second=second*10+3;
    ch=QString::number(second);
    ui->label->setText(ch);

}


void Widget::on_button4_clicked()
{
    second=second*10+4;
    ch=QString::number(second);
    ui->label->setText(ch);
}


void Widget::on_button5_clicked()
{
    second=second*10+5;
    ch=QString::number(second);
    ui->label->setText(ch);
}


void Widget::on_button6_clicked()
{
    second=second*10+6;
    ch=QString::number(second);
    ui->label->setText(ch);
}


void Widget::on_button7_clicked()
{
    second=second*10+7;
    ch=QString::number(second);
    ui->label->setText(ch);
}


void Widget::on_button8_clicked()
{
    second=second*10+8;
    ch=QString::number(second);
    ui->label->setText(ch);
}


void Widget::on_button9_clicked()
{
    second=second*10+9;
    ch=QString::number(second);
    ui->label->setText(ch);
}


void Widget::on_button0_clicked()
{
    second=second*10;
    ch=QString::number(second);
    ui->label->setText(ch);
}


void Widget::on_buttonclear_clicked()//c键即清空键,清空所有数据即可
{
    first=0;
    second=0;
    ui->label->setText("0");
    ui->label_2->setText("");
}


void Widget::on_buttonjia_clicked()
{
    if(first!=0)//first==0就代表第一次按下符号键,若为第二次符号键则需要计算前一次的计算结果
    {
         QString s=ui->label_2->text();//获取label_2组件里面的数据(为字符串)
         if(s=="+")//判断前一次计算的符号
         {
             first+=second;//如果前一次为加法,则先计算加法
             ch=QString::number(first);//将计算后的结果转为字符串
             ui->label->setText(ch);//显示转换后的字符串
         }
         else if(s=="-")
         {
             first-=second;
             ch=QString::number(first);
             ui->label->setText(ch);
         }
         else if(s=="*")
         {
             first*=second;
             ch=QString::number(first);
             ui->label->setText(ch);
         }
         else if(s=="/")
         {
             first/=second;
             ch=QString::number(first);
             ui->label->setText(ch);
         }
    }
    else
        first=second;//如果时第一次输入数据等待符号输入
    second=0;//计算后的结果给了first,senond用于下一次输入数据因此一定要置零
    ui->label_2->setText("+");
}


void Widget::on_buttonjian_clicked()
{
    if(first!=0)
    {
         QString s=ui->label_2->text();
         if(s=="+")
         {
             first+=second;
             ch=QString::number(first);
             ui->label->setText(ch);
         }
         else if(s=="-")
         {
             first-=second;
             ch=QString::number(first);
             ui->label->setText(ch);
         }
         else if(s=="*")
         {
             first*=second;
             ch=QString::number(first);
             ui->label->setText(ch);
         }
         else if(s=="/")
         {
             first/=second;
             ch=QString::number(first);
             ui->label->setText(ch);
         }
    }
    else
        first=second;
    second=0;
    ui->label_2->setText("-");
}


void Widget::on_buttoncheng_clicked()
{
    if(first!=0)
    {
         QString s=ui->label_2->text();
         if(s=="+")
         {
             first+=second;
             ch=QString::number(first);
             ui->label->setText(ch);
         }
         else if(s=="-")
         {
             first-=second;
             ch=QString::number(first);
             ui->label->setText(ch);
         }
         else if(s=="*")
         {
             first*=second;
             ch=QString::number(first);
             ui->label->setText(ch);
         }
         else if(s=="/")
         {
             first/=second;
             ch=QString::number(first);
             ui->label->setText(ch);
         }
    }
    else
        first=second;
    second=0;
    ui->label_2->setText("*");
}


void Widget::on_buttonchu_clicked()
{
    if(first!=0)
    {
         QString s=ui->label_2->text();
         if(s=="+")
         {
             first+=second;
             ch=QString::number(first);
             ui->label->setText(ch);
         }
         else if(s=="-")
         {
             first-=second;
             ch=QString::number(first);
             ui->label->setText(ch);
         }
         else if(s=="*")
         {
             first*=second;
             ch=QString::number(first);
             ui->label->setText(ch);
         }
         else if(s=="/")
         {
             first/=second;
             ch=QString::number(first);
             ui->label->setText(ch);
         }
    }
    else
        first=second;
    second=0;
    ui->label_2->setText("/");
}


void Widget::on_buttondeng_clicked()//按下等号以后就代表此次计算结束所以计算并显示结果以后将first与second置零用于之后的计算
{
    QString s=ui->label_2->text();
    if(s=="+")
    {
        first+=second;
        ch=QString::number(first);
        ui->label->setText(ch);
    }
    else if(s=="-")
    {
        first-=second;
        ch=QString::number(first);
        ui->label->setText(ch);
    }
    else if(s=="*")
    {
        first*=second;
        ch=QString::number(first);
        ui->label->setText(ch);
    }
    else if(s=="/")
    {
        first/=second;
        ch=QString::number(first);
        ui->label->setText(ch);
    }
    first=0;
    second=0;
    ui->label_2->setText("");
}


效果截图
在这里插入图片描述
还未输入数据所以第一个label组件是空的,第二label组件显示运算数据初始为0。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值