QT/C++开发简易计算器教程

QT/C++开发简易计算器教程

最近学习qt,于是就随便做了一个简易的计算器(只支持鼠标点击)

1、使用qt creator设计计算器界面如图,使用右边的属性栏可以编辑窗口内的字体大小以及样式,并且为每个按钮设置相应的名称(如数字0-9使用Num0-Num9代表)

在这里插入图片描述
在这里插入图片描述

2、定义操作数和运算符(左操作数、运算符、右操作数)
    QString num1;//定义左操作数
    QString num2;//定义右操作数
    QString op;//运算符
3、定义按钮类型
enum Btntype{//枚举按钮类型
    Num,//数字型
    Op,//操作符
    Dot,//点
    Equal,//等于
    Clear,//清除
    Back//退格
};
4、初始化文本框及绑定按钮槽函数
ui->lineEdit->setText("0");//初始化计算窗口,将窗口置0
    //绑定数字按钮
    connect(ui->Num0,&QPushButton::clicked,[this](){OnClicked(Num,"0");});
    connect(ui->Num1,&QPushButton::clicked,[this](){OnClicked(Num,"1");});
    connect(ui->Num2,&QPushButton::clicked,[this](){OnClicked(Num,"2");});
    connect(ui->Num3,&QPushButton::clicked,[this](){OnClicked(Num,"3");});
    connect(ui->Num4,&QPushButton::clicked,[this](){OnClicked(Num,"4");});
    connect(ui->Num5,&QPushButton::clicked,[this](){OnClicked(Num,"5");});
    connect(ui->Num6,&QPushButton::clicked,[this](){OnClicked(Num,"6");});
    connect(ui->Num7,&QPushButton::clicked,[this](){OnClicked(Num,"7");});
    connect(ui->Num8,&QPushButton::clicked,[this](){OnClicked(Num,"8");});
    connect(ui->Num9,&QPushButton::clicked,[this](){OnClicked(Num,"9");});

    //绑定运算符按钮
    connect(ui->Sum,&QPushButton::clicked,[this](){OnClicked(Op,"+");});
    connect(ui->Sub,&QPushButton::clicked,[this](){OnClicked(Op,"-");});
    connect(ui->Mul,&QPushButton::clicked,[this](){OnClicked(Op,"×");});
    connect(ui->Div,&QPushButton::clicked,[this](){OnClicked(Op,"/");});

    //绑定其他按钮
    connect(ui->Back,&QPushButton::clicked,[this](){OnClicked(Back,"Back");});
    connect(ui->Clear,&QPushButton::clicked,[this](){OnClicked(Clear,"Clear");});
    connect(ui->Dot,&QPushButton::clicked,[this](){OnClicked(Dot,".");});
    connect(ui->Equal,&QPushButton::clicked,[this](){OnClicked(Equal,"=");});

5、槽函数定义以及实现槽函数
void Widget::OnClicked(Btntype _type,QString _btn){
    switch (_type) {//按钮类型
        case Num:
        {
        if(op.isEmpty())//如果运算符为空,则说明是操作数一
            {
                num1 += _btn;
            }
        else //如果运算符不为空,则说明是操作数二
            {
                num2 += _btn;
            }
            break;
        }
        case Op://操作符
        {
            if(num1.isEmpty()) return;

            if(!num1.isEmpty() && !num2.isEmpty() && !op.isEmpty()){
                double Num1=num1.toDouble();//转换为小数
                double Num2=num2.toDouble();
                double result=0.0;

                if(op=="+"){
                    result = Num1 + Num2;
                }else if (op=="-") {
                    result = Num1 - Num2;
                }else if (op=="×") {
                    result = Num1 * Num2;
                }else if (op=="/") {//注意操作数二不能为0
                    if(Num2==0.0){
                        ui->lineEdit->setText("除数不能为0!");
                        return;
                    }else {
                        result = Num1 / Num2;
                    }
                }
                ui->lineEdit->setText(QString::number(result));//将数字转换为字符串
                num1 = QString::number(result);//将计算结果作为左操作数
                num2.clear();//清空右操作数
            }
            op = _btn;
            break;
        }
        case Clear://清除
        {
            num1.clear();
            op.clear();
            num2.clear();
            break;
        }
        case Dot://点
        {
            if(op.isEmpty())//操作数一的小数点
            {
                if(!num1.isEmpty() && !num1.contains(".")){
                    num1 += _btn;
                }
            }
            else {//操作数二的点
                if(!num2.isEmpty() && !num2.contains(".")){
                    num2 += _btn;
                }
            }
            break;
        }
        case Back:
        {
            if(!num1.isEmpty() && !num2.isEmpty() && !op.isEmpty()){
                num2.chop(1);//尾部删除1位
            }else if(!num1.isEmpty() && !op.isEmpty()){
                op.chop(1);//尾部删除1位
            }else if(!num1.isEmpty()){
                num1.chop(1);//尾部删除1位
            }
            break;
        }
        case Equal://等于
        {
            if(num1.isEmpty() || num2.isEmpty() ||op.isEmpty()) return;

            double Num1=num1.toDouble();//转换为小数
            double Num2=num2.toDouble();
            double result=0.0;

            if(op=="+"){
                result = Num1 + Num2;
            }else if (op=="-") {
                result = Num1 - Num2;
            }else if (op=="×") {
                result = Num1 * Num2;
            }else if (op=="/") {//注意操作数二不能为0
                if(Num2==0.0){
                    ui->lineEdit->setText("除数不能为0!");
                    return;
                }else {
                    result = Num1 / Num2;
                }
            }
            ui->lineEdit->setText(QString::number(result));//将数字转换为字符串
            num1.clear();
            op.clear();
            num2.clear();
            return;
        }
    }

    ui->lineEdit->setText(num1 + op +num2);
    if(ui->lineEdit->text().isEmpty()) ui->lineEdit->setText("0");
}

6、还可以为项目添加额外样式表(.qss文件,与css文件基本相同)
QPushButton{
    background-color:rgba(0,0,0,0);
}
QPushButton:hover{
    background-color:#f1e29c;
    border-radius:5px;
}
QLineEdit{
	border:2px solid #a18f38;
	padding-top:45px;
	color:#000;
}
7、导入样式表函数
QString initStyle(QString path){
    QFile qss(path);
           if( qss.open(QFile::ReadOnly))
           {
               qDebug("open success");
               QString style = QLatin1String(qss.readAll());
               qss.close();
               return style;
           }
           else
           {
              qDebug("Open failed");
     }
}
8、在main函数中调用导入样式表函数以及实例化计算器
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    a.setStyleSheet(initStyle(":/source/Caculater.qss"));
    Widget w;
    w.show();

    return a.exec();
}
9、运行展示

在这里插入图片描述

项目源码已上传

  • 5
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要使用Qt/C++制作一个计算器,首先需要使用Qt编程环境,可以下载并安装Qt Creator。然后按照以下步骤进行计算器的制作: 1. 创建一个新的Qt项目,选择C++窗口应用程序。 2. 在项目中创建主窗口界面,添加需要的按钮、文本框和布局。 3. 给每个按钮添加槽函数,用于处理按钮的点击事件。 4. 在槽函数中根据按钮的不同进行相应的计算操作。 5. 使用Qt的信号与槽机制,将按钮的点击信号与对应的槽函数连接起来。 6. 设置按钮的样式和布局,使其看起来像一个计算器界面。 7. 在主窗口类中添加实现计算逻辑的函数,例如计算加减乘除等操作。 8. 在界面上的文本框中显示计算结果。 例如,对于"加"按钮的槽函数可以这样实现: ``` void MainWindow::on_addButton_clicked() { QString num1Str = ui->num1LineEdit->text(); // 获取第一个数字的文本 QString num2Str = ui->num2LineEdit->text(); // 获取第二个数字的文本 double num1 = num1Str.toDouble(); // 将文本转换为数字 double num2 = num2Str.toDouble(); double result = num1 + num2; // 执行加法运算 QString resultStr = QString::number(result); // 将结果转换为字符串 ui->resultLineEdit->setText(resultStr); // 在结果文本框中显示结果 } ``` 通过类似的方式,可以为其他按钮添加对应的槽函数,实现计算器的各种功能。完成后,可以编译并运行这个Qt/C++计算器项目,即可看到制作好的计算器界面并进行计算操作。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值