这篇文章主要讲解了“怎么使用Qt制作简单的计算器”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用Qt制作简单的计算器”吧!
前言
这里先跟大家说说使用到的函数:
1、槽连接函数
connect(信号发送者,发送的信号,信号接收者,信号接收者的槽函数)
2、取出按钮中的字符
QString line = ui->pushButton1->text() //取出按钮pushButton1中的字符存放到line中
3、设置输入框中显示的内容
ui->lineEdit->setText(line); //设置输入框lineEdit中显示的内容,line为要显示的内容
4、清空字符数组
line.clear(); //清空字符数组line中的内容
5、将字符转换成整形、浮点型、数值
double sum = temp1.toDouble() + temp2.toDouble(); //将字符转换成浮点型
6、将整形、浮点型、数值转换成字符
ui->lineEdit->setText(QString::number(sum)); //将浮点型转换成字符
7、从字符的最后一位开始往开头的方向按位删除字符
line.chop(1); //尾剔除,即是从字符串后面开始按位删除,每次删除字符数组line中的一位,如果是2则是每次两位,依次类推
完整代码
下面是头文件widget.h中的代码:
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QString> namespace Ui { class Widget; } class Widget : public QWidget { Q_OBJECT public: explicit Widget(QWidget *parent = 0); ~Widget(); protected slots: void item0();//0 void item1();//1 void item2();//2 void item3();//3 void item4();//4 void item5();//5 void item6();//6 void item7();//7 void item8();//8 void item9();//9 void sub();//减号 void div();//除号 void mul();//乘号 void cancel();//取消 void delet();//尾剔除 void add();//加号 void equal();//等于号 void point();//小数点 private: Ui::Widget *ui; }; #endif // WIDGET_H
源文件widget.cpp中的代码:
#include "widget.h" #include "ui_widget.h" #include <QString> #include <QDebug> #include <stdlib.h> #include <string.h> Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); //连接槽函数 connect(ui->pushButton0,SIGNAL(clicked(bool)),this,SLOT(item0())); //0 connect(ui->pushButton1,SIGNAL(clicked(bool)),this,SLOT(item1())); //1 connect(ui->pushButton2,SIGNAL(clicked(bool)),this,SLOT(item2())); //2 connect(ui->pushButton3,SIGNAL(clicked(bool)),this,SLOT(item3())); //3 connect(ui->pushButton4,SIGNAL(clicked(bool)),this,SLOT(item4())); //4 connect(ui->pushButton5,SIGNAL(clicked(bool)),this,SLOT(item5())); //5 connect(ui->pushButton6,SIGNAL(clicked(bool)),this,SLOT(item6())); //6 connect(ui->pushButton7,SIGNAL(clicked(bool)),this,SLOT(item7())); //7 connect(ui->pushButton8,SIGNAL(clicked(bool)),this,SLOT(item8())); //8 connect(ui->pushButton9,SIGNAL(clicked(bool)),this,SLOT(item9())); //9 connect(ui->pushButton_c,SIGNAL(clicked(bool)),this,SLOT(cancel()));//取消 connect(ui->pushButton_add,SIGNAL(clicked(bool)),this,SLOT(add()));//加号 connect(ui->pushButton_equal,SIGNAL(clicked(bool)),this,SLOT(equal()));//等于号 connect(ui->pushButton_point,SIGNAL(clicked(bool)),this,SLOT(point()));//小数点 connect(ui->pushButton_div,SIGNAL(clicked(bool)),this,SLOT(div()));//除号 connect(ui->pushButton_sub,SIGNAL(clicked(bool)),this,SLOT(sub()));//减号 connect(ui->pushButton_mul,SIGNAL(clicked(bool)),this,SLOT(mul()));//乘号 connect(ui->pushButton_delete,SIGNAL(clicked(bool)),this,SLOT(delet()));//尾剔除 } QString line; QString item_0; //0 QString item_1; //1 QString item_2; //2 QString item_3;//3 QString item_4;//4 QString item_5;//5 QString item_6;//6 QString item_7;//7 QString item_8;//8 QString item_9;//9 QString temp1,temp2; //临时存放两次输入的要进行计算的项 double sum = 0; //计算后的结果 int flag = 0,flag1 = 0; //flag加号标志,flag1等于号标志 int flag3 = 0;//减号标志 int flag4 = 0;//乘号标志 int flag5 = 0;//除号标志 Widget::~Widget() { delete ui; } void Widget::item0() //0 { item_0 = ui->pushButton0->text(); //获取按键中的字符"0" line += item_0;//每按一次按键就相加一次按键中的字符"0" ui->lineEdit->setText(line); //显示到输入条中 } void Widget::item1() //1 { item_1 = ui->pushButton1->text(); line += item_1; ui->lineEdit->setText(line); } void Widget::item2() //2 { item_2 = ui->pushButton2->text(); //获取按键中的字符"2" line += item_2; //每按一次按键就相加一次按键中的字符"2" ui->lineEdit->setText(line); } void Widget::item3() //3 { item_3 = ui->pushButton3->text(); //获取按键中的字符"3" line += item_3; //每按一次按键就相加一次按键中的字符"3" ui->lineEdit->setText(line); } void Widget::item4() //4 { item_4 = ui->pushButton4->text(); line += item_4; ui->lineEdit->setText(line); } void Widget::item5() //5 { item_5 = ui->pushButton5->text(); line += item_5; ui->lineEdit->setText(line); } void Widget::item6() //6 { item_6 = ui->pushButton6->text(); line += item_6; ui->lineEdit->setText(line); } void Widget::item7() //7 { item_7 = ui->pushButton7->text(); line += item_7; ui->lineEdit->setText(line); } void Widget::item8() //8 { item_8 = ui->pushButton8->text(); line += item_8; ui->lineEdit->setText(line); } void Widget::item9() //9 { item_9 = ui->pushButton9->text(); line += item_9; ui->lineEdit->setText(line); } void Widget::point() //小数点 { if(flag1 == 0) //没有按等于号按键,说明没有进行运算,所以显示第一次输入的字符串 { line +="."; ui->lineEdit->setText(line); } if(flag1 == 1) //按了等于号按键,这时候要显示后面一次输入的字符串 { line = ui->lineEdit->text(); line += "."; ui->lineEdit->setText(line); flag1 = 0; } } void Widget::delet() //尾剔除 { line = ui->lineEdit->text(); //获取输入条中的字符 line.chop(1); //倒位删除,即是从字符串后面开始按位删除 ui->lineEdit->setText(line); } void Widget::cancel() //重新置零 { line.clear(); temp1.clear(); temp2.clear(); sum = 0; flag = 0; flag1 = 0; flag3 = 0; flag4 =0; flag5 = 0; ui->lineEdit->setText(line);//输出0 } void Widget::add() //相加 { flag = 1; temp1 = ui->lineEdit->text(); //获取前面输入的字符,并临时保存起来 line.clear(); //清空字符数组 ui->lineEdit->setText(line);//显示清空状态 } void Widget::sub() //相减 { flag3 = 1;//按了加号按键就改变状态 temp1 = ui->lineEdit->text(); //获取前面输入的字符,并临时保存起来 line.clear(); //清空字符数组 ui->lineEdit->setText(line);//显示清空状态 } void Widget::div()//除法 { flag4 = 1;//按了加号按键就改变状态 temp1 = ui->lineEdit->text(); //获取前面输入的字符,并临时保存起来 line.clear(); //清空字符数组 ui->lineEdit->setText(line);//显示清空状态 } void Widget::mul()//乘法 { flag5 = 1;//按了加号按键就改变状态 temp1 = ui->lineEdit->text(); //获取前面输入的字符,并临时保存起来 line.clear(); //清空字符数组 ui->lineEdit->setText(line);//显示清空状态 } void Widget::equal() //得出结果 { flag1 = 1; //按一次等于号就改变状态 if(flag == 1) //加法 { temp2 = ui->lineEdit->text(); line.clear(); //清空字符串 sum = temp1.toDouble() + temp2.toDouble(); //将字符转换成浮点型 ui->lineEdit->setText(QString::number(sum)); //将浮点型转换成字符 flag = 0; //重新让标志位置零,等待下一次的加法进行 } else if(flag3 == 1) //减法 { temp2 = ui->lineEdit->text(); line.clear(); //清空字符串 ui->lineEdit->setText(line); sum = temp1.toDouble() - temp2.toDouble(); //将字符转换成浮点型 if(sum == 0) //等于0 { ui->lineEdit->setText("0"); } ui->lineEdit->setText(QString::number(sum)); //将浮点型转换成字符 // qDebug()<<sum; flag3 = 0; //重新让标志位置零,等待下一次的减法进行 } else if(flag4 == 1) //除法 { temp2 = ui->lineEdit->text(); line.clear(); //清空字符串 sum = temp1.toDouble() / temp2.toDouble(); //将字符转换成浮点型 if(temp2 == "0") //分母等于0 { ui->lineEdit->setText("0"); } ui->lineEdit->setText(QString::number(sum)); //将浮点型转换成字符 flag4 = 0; //重新让标志位置零,等待下一次的除法进行 } else if(flag5 == 1) //乘法 { temp2 = ui->lineEdit->text(); line.clear(); //清空字符串 sum = temp1.toDouble() * temp2.toDouble(); //将字符转换成浮点型 ui->lineEdit->setText(QString::number(sum)); //将浮点型转换成字符 flag5 = 0; //重新让标志位置零,等待下一次的乘法进行 } }
效果图