QT计算器基本功能实现,加减乘除平方根平方

目录

         1.建立工程首先建立一个工程项目​编辑

 2.ui模块

3.代码模块

4.运行效果


建立工程

首先建立一个工程项目
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==编辑

 点击下一步可修改名称和路径

 在Base class下拉框选择QWidget,也可以选择其他

选择下一步,直到点击完成

 建立好了以后,就在.h   .cpp     .ui  里面编辑,其中ui里面是拖拽控件

 ui模块

 首先拖拽一个widget,所有的按键均为pushButton且均在同一个widget上面,可进行栅格布局。输入和输出框为line Edit,不在widget上面。

做好布局以后,选中整体设置为垂直布局,修改按键名称方便后续使用。对象这一列的名称均可人为修改,修改为自己能辨认的

代码模块

//widget.h  此为头文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <algorithm>
#include <math.h>  //sqrt()函数需要的头文件

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

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


private slots:    //.cpp里面的槽函数要在这里声明
    void on_pushButton_1_clicked();//按键1
    void on_pushButton_2_clicked();//按键2
    void on_pushButton_3_clicked();//按键3
    void on_pushButton_4_clicked();//按键4
    void on_pushButton_5_clicked();//按键5
    void on_pushButton_6_clicked();//按键6
    void on_pushButton_7_clicked();//按键7
    void on_pushButton_8_clicked();//按键8
    void on_pushButton_9_clicked();//按键9

    void on_pushButton_clicked();//按键正负        注意:为实现该功能
    void on_pushButton_0_clicked();//按键0
    void on_pushButton_point_clicked();//按键.(小数点)

    void on_pushButton_plus_clicked();//按键+(加)
    void on_pushButton_cut_clicked();//按键-(减)
    void on_pushButton_multiple_clicked();//按键*(乘)
    void on_pushButton_divide_clicked();//按键/(除)
    void on_pushButton_result_clicked();//按键=(等于)
    void on_pushButton_Delete_clicked();//按键删除

    void on_pushButton_percent_clicked();//按键百分号
    void on_pushButton_CI_clicked();//按键CI
    void on_pushButton_CO_clicked();//按键CO

    void on_pushButton_1x_clicked();//按键1/x
    void on_pushButton_x2_clicked();//按键x2
    void on_pushButton_sqrt_clicked();//按键sqrt

private:
    Ui::Widget *ui;

    void on_lineEdit_intput();//输入显示
    void on_lineEdit_output();//输出显示

};
#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    setWindowTitle("计算器");
    //设置按钮文本大小,颜色等
    this->setStyleSheet(QString("QPushButton{font:30px;}"
                                "QPushButton:hover{background:blue;color:white;}"
                                "QLineEdit{font:30px;}"));

    //    关联信号与槽,让按钮和函数关联起来,实现按一下按钮屏幕实现功能
    connect(ui->push_1, SIGNAL(clicked()), this, SLOT(on_pushButton_1_clicked()));
    connect(ui->push_2, SIGNAL(clicked()), this, SLOT(on_pushButton_2_clicked()));
    connect(ui->push_3, SIGNAL(clicked()), this, SLOT(on_pushButton_3_clicked()));
    connect(ui->push_4, SIGNAL(clicked()), this, SLOT(on_pushButton_4_clicked()));
    connect(ui->push_5, SIGNAL(clicked()), this, SLOT(on_pushButton_5_clicked()));
    connect(ui->push_6, SIGNAL(clicked()), this, SLOT(on_pushButton_6_clicked()));
    connect(ui->push_7, SIGNAL(clicked()), this, SLOT(on_pushButton_7_clicked()));
    connect(ui->push_8, SIGNAL(clicked()), this, SLOT(on_pushButton_8_clicked()));
    connect(ui->push_9, SIGNAL(clicked()), this, SLOT(on_pushButton_9_clicked()));
    //正负、0、小数点
    connect(ui->push, SIGNAL(clicked()), this, SLOT(on_pushButton_clicked()));
    connect(ui->push_0, SIGNAL(clicked()), this, SLOT(on_pushButton_0_clicked()));
    connect(ui->push_point, SIGNAL(clicked()), this, SLOT(on_pushButton_point_clicked()));
    //加减乘除,等于,删除
    connect(ui->push_plus, SIGNAL(clicked()), this, SLOT(on_pushButton_plus_clicked()));
    connect(ui->push_cut, SIGNAL(clicked()), this, SLOT(on_pushButton_cut_clicked()));
    connect(ui->push_multiple, SIGNAL(clicked()), this, SLOT(on_pushButton_multiple_clicked()));
    connect(ui->push_divide, SIGNAL(clicked()), this, SLOT(on_pushButton_divide_clicked()));
    connect(ui->push_result, SIGNAL(clicked()), this, SLOT(on_pushButton_result_clicked()));
    connect(ui->push_Delete, SIGNAL(clicked()), this, SLOT(on_pushButton_Delete_clicked()));
    //百分号,ci,co
    connect(ui->push_percent, SIGNAL(clicked()), this, SLOT(on_pushButton_percent_clicked()));
    connect(ui->push_CI, SIGNAL(clicked()), this, SLOT(on_pushButton_CI_clicked()));
    connect(ui->push_CO, SIGNAL(clicked()), this, SLOT(on_pushButton_CO_clicked()));
    //分数,平方,根号
    connect(ui->push_1x, SIGNAL(clicked()), this, SLOT(on_pushButton_1x_clicked()));
    connect(ui->push_x2, SIGNAL(clicked()), this, SLOT(on_pushButton_x2_clicked()));
    connect(ui->push_sqrt, SIGNAL(clicked()), this, SLOT(on_pushButton_sqrt_clicked()));
}

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

//lineEdit_input为输入框,输入5+6这些简单计算

void Widget::on_pushButton_1_clicked()//按键1
{
    ui->lineEdit_input->insert("1");
}
void Widget::on_pushButton_2_clicked()//按键2
{
    ui->lineEdit_input->insert("2");
}
void Widget::on_pushButton_3_clicked()//按键3
{
    ui->lineEdit_input->insert("3");
}
void Widget::on_pushButton_4_clicked()//按键4
{
    ui->lineEdit_input->insert("4");
}
void Widget::on_pushButton_5_clicked()//按键5
{
    ui->lineEdit_input->insert("5");
}
void Widget::on_pushButton_6_clicked()//按键6
{
    ui->lineEdit_input->insert("6");
}
void Widget::on_pushButton_7_clicked()//按键7
{
    ui->lineEdit_input->insert("7");
}
void Widget::on_pushButton_8_clicked()//按键8
{
    ui->lineEdit_input->insert("8");
}
void Widget::on_pushButton_9_clicked()//按键9
{
    ui->lineEdit_input->insert("9");
}


void Widget::on_pushButton_clicked()//按键正负     注意,暂未实现正负功能呢,可略过
{
    ui->lineEdit_input->insert("error");
}
void Widget::on_pushButton_0_clicked()//按键0
{
    ui->lineEdit_input->insert("0");
}
void Widget::on_pushButton_point_clicked()//按键.(小数点)
{
    ui->lineEdit_input->insert(".");
}


void Widget::on_pushButton_plus_clicked()//按键+(加)
{
    ui->lineEdit_input->insert("+");
}
void Widget::on_pushButton_cut_clicked()//按键-(减)
{
    ui->lineEdit_input->insert("-");
}
void Widget::on_pushButton_multiple_clicked()//按键*(乘)
{
    ui->lineEdit_input->insert("*");
}
void Widget::on_pushButton_divide_clicked()//按键÷(除)
{
    ui->lineEdit_input->insert("÷");
}

void Widget::on_pushButton_1x_clicked()//按键1/x
{
    ui->lineEdit_input->insert("^-1");
}
void Widget::on_pushButton_x2_clicked()//按键x2
{
    ui->lineEdit_input->insert("^2");
}
void Widget::on_pushButton_sqrt_clicked()//按键sqrt
{
    ui->lineEdit_input->insert("√");
}


//当按下等于,就开始计算算式
void Widget::on_pushButton_result_clicked()//按键=(等于)
{
    QString value;
    value = ui->lineEdit_input->text();    //读取输入框输入的算式
    if(value.isEmpty())
        return;

    //如果算式里面有*,判断为乘法,b为乘法符号a前面的数字,c为乘法符号a后面出现的数字
    if(value.indexOf("*")!=-1)
    {   //indexOf() 方法可返回首次出现的位置。如果没有出现,则返回 -1。
        double a;
        a=value.indexOf("*");
        double b;
        b=value.leftRef(a).toDouble();
        double c;
        c=value.rightRef(value.size()-a-1).toDouble();
        double d;
        d=(b*c);
        ui->lineEdit_output->setText(QString::number(d));
    }

    //lineEdit_output为输出框,setText代表把d的值放入指定位置,也就是输出框
    if(value.indexOf("÷")!=-1)
    {    //除法
        double a;
        a=value.indexOf("÷");
        double b;
        b=value.leftRef(a).toDouble();
        double c;
        c=value.rightRef(value.size()-a-1).toDouble();
        double d;
        d=(b/c);
        ui->lineEdit_output->setText(QString::number(d));
    }
    if(value.indexOf("+")!=-1)
    {
        double a;
        a=value.indexOf("+");
        double b;
        b=value.leftRef(a).toDouble();
        double c;
        c=value.rightRef(value.size()-a-1).toDouble();
        double d;
        d=(b+c);
        ui->lineEdit_output->setText(QString::number(d));
    }
    if(value.indexOf("-")!=-1)
    {
        double a;
        a=value.indexOf("-");
        double b;
        b=value.leftRef(a).toDouble();
        double c;
        c=value.rightRef(value.size()-a-1).toDouble();
        double d;
        d=(b-c);
        ui->lineEdit_output->setText(QString::number(d));
    }
    if(value.indexOf("^-1")!=-1)
    {    //倒数,1/x
        double a;
        a=value.indexOf("^-1");
        double b;
        b=value.leftRef(a).toDouble();
        double c;
        c=value.rightRef(value.size()-a-1).toDouble();
        double d;
        d=(1/b);
        ui->lineEdit_output->setText(QString::number(d));
    }
    if(value.indexOf("^2")!=-1)
    {    //平方
        double a;
        a=value.indexOf("^2");
        double b;
        b=value.leftRef(a).toDouble();
        double d;
        d= b*b;
        ui->lineEdit_output->setText(QString::number(d));
    }
    if(value.indexOf("√")!=-1)
    {    //平方根
        double a;
        a=value.indexOf("√");
        double b;
        b=value.leftRef(a).toDouble();
        double d;
        d=sqrt(b);
        ui->lineEdit_output->setText(QString::number(d));
    }
    if(value.indexOf("%")!=-1)
    {    //百分号,小数点前移两位
        double a;
        a=value.indexOf("%");
        double b;
        b=value.leftRef(a).toDouble();
        double d;
        d=b/100;
        ui->lineEdit_output->setText(QString::number(d));
    }

}

void Widget::on_pushButton_Delete_clicked()//按键删除,按一次删除一个
{
    ui->lineEdit_input->setCursorPosition(ui->lineEdit_input->cursorPosition()-1);//光标位置
    ui->lineEdit_input->del();
}


void Widget::on_pushButton_percent_clicked()//按键百分号
{
    ui->lineEdit_input->insert("%");
}
void Widget::on_pushButton_CI_clicked()//按键CI
{
    ui->lineEdit_input->clear();  //点击清空输入框
}
void Widget::on_pushButton_CO_clicked()//按键CO,清空输入输出框
{
    ui->lineEdit_input->clear();
    ui->lineEdit_output->clear();
}

运行效果

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值