使用qt制作一个简单的计算器

时间:2023-03-08 22:44:00

前言:今天使用qt制作了一个很简单的计算器,觉得挺有意思的,所以在这里跟大家分享一下。

这里先跟大家说说使用到的函数:

一、槽连接函数

connect(信号发送者,发送的信号,信号接收者,信号接收者的槽函数)   //前面我有一篇文章已经介绍过槽函数的使用了,大家有兴趣可以看看,这里就不详细说了。 

二、取出按钮中的字符

QString line = ui->pushButton1->text() //取出按钮pushButton1中的字符存放到line中

三、设置输入框中显示的内容

ui->lineEdit->setText(line); //设置输入框lineEdit中显示的内容,line为要显示的内容

四、清空字符数组

line.clear(); //清空字符数组line中的内容

五、将字符转换成整形、浮点型、数值

double sum = temp1.toDouble() + temp2.toDouble(); //将字符转换成浮点型

六、将整形、浮点型、数值转换成字符

 ui->lineEdit->setText(QString::number(sum)); //将浮点型转换成字符

七、从字符的最后一位开始往开头的方向按位删除字符

 line.chop(); //尾剔除,即是从字符串后面开始按位删除,每次删除字符数组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 = );
~Widget(); protected slots:
void item0();//
void item1();//
void item2();//
void item3();//
void item4();//
void item5();//
void item6();//
void item7();//
void item8();//
void item9();//
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())); //
connect(ui->pushButton1,SIGNAL(clicked(bool)),this,SLOT(item1())); //
connect(ui->pushButton2,SIGNAL(clicked(bool)),this,SLOT(item2())); //
connect(ui->pushButton3,SIGNAL(clicked(bool)),this,SLOT(item3())); //
connect(ui->pushButton4,SIGNAL(clicked(bool)),this,SLOT(item4())); //
connect(ui->pushButton5,SIGNAL(clicked(bool)),this,SLOT(item5())); //
connect(ui->pushButton6,SIGNAL(clicked(bool)),this,SLOT(item6())); //
connect(ui->pushButton7,SIGNAL(clicked(bool)),this,SLOT(item7())); //
connect(ui->pushButton8,SIGNAL(clicked(bool)),this,SLOT(item8())); //
connect(ui->pushButton9,SIGNAL(clicked(bool)),this,SLOT(item9())); // 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; //
QString item_1; //
QString item_2; //
QString item_3;//
QString item_4;//
QString item_5;//
QString item_6;//
QString item_7;//
QString item_8;//
QString item_9;//
QString temp1,temp2; //临时存放两次输入的要进行计算的项
double sum = ; //计算后的结果
int flag = ,flag1 = ; //flag加号标志,flag1等于号标志
int flag3 = ;//减号标志
int flag4 = ;//乘号标志
int flag5 = ;//除号标志
Widget::~Widget()
{
delete ui;
} void Widget::item0() //
{
item_0 = ui->pushButton0->text(); //获取按键中的字符"0"
line += item_0;//每按一次按键就相加一次按键中的字符"0"
ui->lineEdit->setText(line); //显示到输入条中
} void Widget::item1() //
{
item_1 = ui->pushButton1->text();
line += item_1;
ui->lineEdit->setText(line);
} void Widget::item2() //
{
item_2 = ui->pushButton2->text(); //获取按键中的字符"2"
line += item_2; //每按一次按键就相加一次按键中的字符"2"
ui->lineEdit->setText(line);
} void Widget::item3() //
{
item_3 = ui->pushButton3->text(); //获取按键中的字符"3"
line += item_3; //每按一次按键就相加一次按键中的字符"3"
ui->lineEdit->setText(line);
} void Widget::item4() //
{
item_4 = ui->pushButton4->text();
line += item_4;
ui->lineEdit->setText(line);
} void Widget::item5() //
{
item_5 = ui->pushButton5->text();
line += item_5;
ui->lineEdit->setText(line);
} void Widget::item6() //
{
item_6 = ui->pushButton6->text();
line += item_6;
ui->lineEdit->setText(line);
} void Widget::item7() //
{
item_7 = ui->pushButton7->text();
line += item_7;
ui->lineEdit->setText(line);
} void Widget::item8() //
{
item_8 = ui->pushButton8->text();
line += item_8;
ui->lineEdit->setText(line);
} void Widget::item9() //
{
item_9 = ui->pushButton9->text();
line += item_9;
ui->lineEdit->setText(line);
} void Widget::point() //小数点
{
if(flag1 == ) //没有按等于号按键,说明没有进行运算,所以显示第一次输入的字符串
{
line +=".";
ui->lineEdit->setText(line);
} if(flag1 == ) //按了等于号按键,这时候要显示后面一次输入的字符串
{
line = ui->lineEdit->text();
line += ".";
ui->lineEdit->setText(line);
flag1 = ;
}
} void Widget::delet() //尾剔除
{
line = ui->lineEdit->text(); //获取输入条中的字符
line.chop(); //倒位删除,即是从字符串后面开始按位删除
ui->lineEdit->setText(line);
} void Widget::cancel() //重新置零
{
line.clear();
temp1.clear();
temp2.clear();
sum = ;
flag = ;
flag1 = ;
flag3 = ;
flag4 =;
flag5 = ;
ui->lineEdit->setText(line);//输出0
} void Widget::add() //相加
{
flag = ;
temp1 = ui->lineEdit->text(); //获取前面输入的字符,并临时保存起来
line.clear(); //清空字符数组
ui->lineEdit->setText(line);//显示清空状态
} void Widget::sub() //相减
{
flag3 = ;//按了加号按键就改变状态
temp1 = ui->lineEdit->text(); //获取前面输入的字符,并临时保存起来
line.clear(); //清空字符数组
ui->lineEdit->setText(line);//显示清空状态
} void Widget::div()//除法
{
flag4 = ;//按了加号按键就改变状态
temp1 = ui->lineEdit->text(); //获取前面输入的字符,并临时保存起来
line.clear(); //清空字符数组
ui->lineEdit->setText(line);//显示清空状态
} void Widget::mul()//乘法
{
flag5 = ;//按了加号按键就改变状态
temp1 = ui->lineEdit->text(); //获取前面输入的字符,并临时保存起来
line.clear(); //清空字符数组
ui->lineEdit->setText(line);//显示清空状态
} void Widget::equal() //得出结果
{
flag1 = ; //按一次等于号就改变状态
if(flag == ) //加法
{
temp2 = ui->lineEdit->text();
line.clear(); //清空字符串
sum = temp1.toDouble() + temp2.toDouble(); //将字符转换成浮点型
ui->lineEdit->setText(QString::number(sum)); //将浮点型转换成字符
flag = ; //重新让标志位置零,等待下一次的加法进行
} else if(flag3 == ) //减法
{
temp2 = ui->lineEdit->text();
line.clear(); //清空字符串
ui->lineEdit->setText(line);
sum = temp1.toDouble() - temp2.toDouble(); //将字符转换成浮点型 if(sum == ) //等于0
{
ui->lineEdit->setText("");
}
ui->lineEdit->setText(QString::number(sum)); //将浮点型转换成字符
// qDebug()<<sum;
flag3 = ; //重新让标志位置零,等待下一次的减法进行
} else if(flag4 == ) //除法
{
temp2 = ui->lineEdit->text();
line.clear(); //清空字符串
sum = temp1.toDouble() / temp2.toDouble(); //将字符转换成浮点型
if(temp2 == "") //分母等于0
{
ui->lineEdit->setText("");
}
ui->lineEdit->setText(QString::number(sum)); //将浮点型转换成字符
flag4 = ; //重新让标志位置零,等待下一次的除法进行
} else if(flag5 == ) //乘法
{
temp2 = ui->lineEdit->text();
line.clear(); //清空字符串
sum = temp1.toDouble() * temp2.toDouble(); //将字符转换成浮点型
ui->lineEdit->setText(QString::number(sum)); //将浮点型转换成字符
flag5 = ; //重新让标志位置零,等待下一次的乘法进行
} }

效果图如下:

使用qt制作一个简单的计算器

如果有什么建议或者疑惑的地方可以私聊我。