QT实现简单计算器及中文乱码问题

提示:本文主要使用QT进行图形化界面编程的主要过程及在实现过程中遇到的问题解决,水平不高,希望各位读者大佬看完后,有更好的改进建议,欢迎留言评论。注意:这次只是实现一个简单的计算及语音播报。


一、部分实现代码

1 语音播报部分

1.1 引入库

如果要使用QT的播报功能,则需要在pro文件中,加入QT += texttospeech,具体代码如下:

QT       += core gui texttospeech //加入的主要语句

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = sampleCalculate
TEMPLATE = app

1.2 加入头文件

完成第一步后,接下来就是引入头文件,代码如下:

#include <QTextToSpeech>

1.3 实现播报

QTextToSpeech *spe  = new QTextToSpeech; //声明并创建一个播报对象
spe->say("加"); //调用播报函数 实现播报

2 按钮数字功能实现

计算器中最重要的就是数字的获取,每个按钮代表着不同的数字和运算符。通过获取不同的数字和运算符,得到最后的计算结果。

2.1 获取数字和运算符

由于数字和运算符都是通过按钮文本来获取的,如果是每个按钮都有一个槽函数,并在槽函数中得到当前的这个数,就会显得很繁琐,所以,这里通过获取界面中的控件元素,来实现一个函数获取所有的按钮对象,代码如下:

//通过获取界面中按钮元素 得到一个集合 
 QList<QPushButton*> btnList = this->findChildren<QPushButton*>();
 //通过循环 来实现点击槽函数
    foreach (QPushButton *btns, btnList) {
        connect(btns,SIGNAL(clicked()),this,SLOT(GenerateCalFormula()));
    }
2.2 计算函数

通过以上步骤,获取到一条计算语句,当按下”=“时,解析该语句,以此实现结果的计算。代码如下:

void Widget::calculationResult(){
    QString laterNum;//前一个数
    QString calCharacter;//计算符号
    QString backNum;//后一个数
    bool boundFlag = false;//获取到运算符标志符
    foreach (QString val, calcuSent) {

        if(val == "-" || val == "+" || val == "*" || val == "/"){
         //如果没有遇到这些符号 则一直获取数字
            calCharacter = val;
            boundFlag = true;
            continue;//获取到符号后 继续
        }

        if(!boundFlag){
        //没有获取到符号时 是前面一个数
            laterNum = laterNum + val;
        }else{
        //获取到符号后 是后面一个数
            backNum = backNum + val;
        }
    }

    qDebug() <<  "laterNum:" << laterNum << "backNum:" << backNum;

    double result;//声明一个结果变量

    if(calCharacter == "+"){
        result = laterNum.toInt() + backNum.toInt();
    }
    else if(calCharacter == "-"){
        result =laterNum.toInt() - backNum.toInt();
    }
    else if(calCharacter == "*"){
        result = laterNum.toInt() * backNum.toInt();
    }
    else if(calCharacter == "/"){
        if(backNum == "0"){
            ui->lineEdit->setText(tr("除数不能为0"));
            calFlag = true;
            return;
        }
        result = laterNum.toDouble() / backNum.toDouble();
    }
    //加上语音播报后 负数读出杠有点奇怪 所以做一下处理
    ui->lineEdit->setText(QString("%1").arg(result));
    calFlag = true;
    if(result < 0){
        result= abs(result);
        spe->say(QString("等于负%1").arg(result));
    }
    else{
        spe->say(QString("等于%1").arg(result));
    }
}

二、遇到的问题及解决

1.pro文件加入texttospeech时,加入头文件一直报"No such file or directory"。

解决方法:其实并不是环境变量没有配置的原因,在安装QT的时候,默认选择C盘安装,且将QTextToSpeech组件也下载了。而是在pro文件写入QT += texttospeech后,要qmark一下。不然会报错。
在这里插入图片描述

2.QT乱码问题

一开始,使用qDebug()或者setText()时,总会出现有的地方乱码问题。如果要使用中文,直接一步到位的方法如下:
1.找到工具->选项->文本编辑器->行为->文本编码->选择“如果编码时utf-8则添加”
在这里插入图片描述
2.在头文件中加入:“#pragma execution_character_set(“utf-8”)”
即可解决中文乱码问题。

资源链接

提示:如有需要,请自取:
链接:https://pan.baidu.com/s/1Q-_va34wmDpZZNE7oUmfZA
提取码:8998

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值