提示:本文主要使用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