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

Posted 菜头大大

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用qt制作一个简单的计算器相关的知识,希望对你有一定的参考价值。

前言:今天使用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(1); //尾剔除,即是从字符串后面开始按位删除,每次删除字符数组line中的一位,如果是2则是每次两位,依次类推

 

下面是头文件widget.h中的代码:

 1 #ifndef WIDGET_H
 2 #define WIDGET_H
 3 
 4 #include <QWidget>
 5 #include <QString>
 6 
 7 namespace Ui {
 8 class Widget;
 9 }
10 
11 class Widget : public QWidget
12 {
13     Q_OBJECT
14 
15 public:
16     explicit Widget(QWidget *parent = 0);
17     ~Widget();
18 
19 protected slots:
20     void item0();//0
21     void item1();//1
22     void item2();//2
23     void item3();//3
24     void item4();//4
25     void item5();//5
26     void item6();//6
27     void item7();//7
28     void item8();//8
29     void item9();//9
30     void sub();//减号
31     void div();//除号
32     void mul();//乘号
33     void cancel();//取消
34     void delet();//尾剔除
35     void add();//加号
36     void equal();//等于号
37     void point();//小数点
38 
39 private:
40     Ui::Widget *ui;
41 
42 };
43 
44 #endif // WIDGET_H

源文件widget.cpp中的代码:

  1 #include "widget.h"
  2 #include "ui_widget.h"
  3 #include <QString>
  4 #include <QDebug>
  5 #include <stdlib.h>
  6 #include <string.h>
  7 Widget::Widget(QWidget *parent) :
  8     QWidget(parent),
  9     ui(new Ui::Widget)
 10 {
 11     ui->setupUi(this);
 12 
 13     //连接槽函数
 14     connect(ui->pushButton0,SIGNAL(clicked(bool)),this,SLOT(item0())); //0
 15     connect(ui->pushButton1,SIGNAL(clicked(bool)),this,SLOT(item1())); //1
 16     connect(ui->pushButton2,SIGNAL(clicked(bool)),this,SLOT(item2())); //2
 17     connect(ui->pushButton3,SIGNAL(clicked(bool)),this,SLOT(item3())); //3
 18     connect(ui->pushButton4,SIGNAL(clicked(bool)),this,SLOT(item4())); //4
 19     connect(ui->pushButton5,SIGNAL(clicked(bool)),this,SLOT(item5())); //5
 20     connect(ui->pushButton6,SIGNAL(clicked(bool)),this,SLOT(item6())); //6
 21     connect(ui->pushButton7,SIGNAL(clicked(bool)),this,SLOT(item7())); //7
 22     connect(ui->pushButton8,SIGNAL(clicked(bool)),this,SLOT(item8())); //8
 23     connect(ui->pushButton9,SIGNAL(clicked(bool)),this,SLOT(item9())); //9
 24 
 25     connect(ui->pushButton_c,SIGNAL(clicked(bool)),this,SLOT(cancel()));//取消
 26     connect(ui->pushButton_add,SIGNAL(clicked(bool)),this,SLOT(add()));//加号
 27     connect(ui->pushButton_equal,SIGNAL(clicked(bool)),this,SLOT(equal()));//等于号
 28     connect(ui->pushButton_point,SIGNAL(clicked(bool)),this,SLOT(point()));//小数点
 29     connect(ui->pushButton_div,SIGNAL(clicked(bool)),this,SLOT(div()));//除号
 30     connect(ui->pushButton_sub,SIGNAL(clicked(bool)),this,SLOT(sub()));//减号
 31     connect(ui->pushButton_mul,SIGNAL(clicked(bool)),this,SLOT(mul()));//乘号
 32     connect(ui->pushButton_delete,SIGNAL(clicked(bool)),this,SLOT(delet()));//尾剔除
 33 }
 34 
 35 
 36 QString line;
 37 QString item_0; //0
 38 QString item_1; //1
 39 QString item_2; //2
 40 QString item_3;//3
 41 QString item_4;//4
 42 QString item_5;//5
 43 QString item_6;//6
 44 QString item_7;//7
 45 QString item_8;//8
 46 QString item_9;//9
 47 QString temp1,temp2; //临时存放两次输入的要进行计算的项
 48 double sum = 0;  //计算后的结果
 49 int flag = 0,flag1 = 0; //flag加号标志,flag1等于号标志
 50 int flag3 = 0;//减号标志
 51 int flag4 = 0;//乘号标志
 52 int flag5 = 0;//除号标志
 53 Widget::~Widget()
 54 {
 55     delete ui;
 56 }
 57 
 58 void Widget::item0() //0
 59 {
 60     item_0 = ui->pushButton0->text(); //获取按键中的字符"0"
 61     line += item_0;//每按一次按键就相加一次按键中的字符"0"
 62     ui->lineEdit->setText(line); //显示到输入条中
 63 }
 64 
 65 void Widget::item1() //1
 66 {
 67     item_1 = ui->pushButton1->text();
 68     line += item_1;
 69     ui->lineEdit->setText(line);
 70 }
 71 
 72 void Widget::item2() //2
 73 {
 74    item_2 = ui->pushButton2->text(); //获取按键中的字符"2"
 75    line += item_2; //每按一次按键就相加一次按键中的字符"2"
 76    ui->lineEdit->setText(line);
 77 }
 78 
 79 
 80 void Widget::item3() //3
 81 {
 82    item_3 = ui->pushButton3->text(); //获取按键中的字符"3"
 83    line += item_3; //每按一次按键就相加一次按键中的字符"3"
 84    ui->lineEdit->setText(line);
 85 }
 86 
 87 void Widget::item4() //4
 88 {
 89     item_4 = ui->pushButton4->text();
 90     line += item_4;
 91     ui->lineEdit->setText(line);
 92 }
 93 
 94 void Widget::item5() //5
 95 {
 96     item_5 = ui->pushButton5->text();
 97     line += item_5;
 98     ui->lineEdit->setText(line);
 99 }
100 
101 void Widget::item6() //6
102 {
103     item_6 = ui->pushButton6->text();
104     line += item_6;
105     ui->lineEdit->setText(line);
106 }
107 
108 void Widget::item7() //7
109 {
110     item_7 = ui->pushButton7->text();
111     line += item_7;
112     ui->lineEdit->setText(line);
113 }
114 
115 void Widget::item8() //8
116 {
117     item_8 = ui->pushButton8->text();
118     line += item_8;
119     ui->lineEdit->setText(line);
120 }
121 
122 void Widget::item9() //9
123 {
124     item_9 = ui->pushButton9->text();
125     line += item_9;
126     ui->lineEdit->setText(line);
127 }
128 
129 
130 void Widget::point() //小数点
131 {
132     if(flag1 == 0) //没有按等于号按键,说明没有进行运算,所以显示第一次输入的字符串
133     {
134         line +=".";
135         ui->lineEdit->setText(line);
136     }
137 
138     if(flag1 == 1) //按了等于号按键,这时候要显示后面一次输入的字符串
139     {
140         line  = ui->lineEdit->text();
141         line += ".";
142         ui->lineEdit->setText(line);
143         flag1 = 0;
144     }
145 }
146 
147 
148 void Widget::delet() //尾剔除
149 {
150     line = ui->lineEdit->text(); //获取输入条中的字符
151     line.chop(1); //倒位删除,即是从字符串后面开始按位删除
152     ui->lineEdit->setText(line);
153 }
154 
155 void Widget::cancel() //重新置零
156 {
157    line.clear();
158    temp1.clear();
159    temp2.clear();
160    sum = 0;
161    flag = 0;
162    flag1 = 0;
163    flag3 = 0;
164    flag4 =0;
165    flag5 = 0;
166    ui->lineEdit->setText(line);//输出0
167 }
168 
169 void Widget::add() //相加
170 {
171     flag = 1;
172     temp1 = ui->lineEdit->text(); //获取前面输入的字符,并临时保存起来
173     line.clear(); //清空字符数组
174     ui->lineEdit->setText(line);//显示清空状态
175 }
176 
177 void Widget::sub() //相减
178 {
179     flag3 = 1;//按了加号按键就改变状态
180     temp1 = ui->lineEdit->text(); //获取前面输入的字符,并临时保存起来
181     line.clear(); //清空字符数组
182     ui->lineEdit->setText(line);//显示清空状态
183 }
184 
185 void Widget::div()//除法
186 {
187     flag4 = 1;//按了加号按键就改变状态
188     temp1 = ui->lineEdit->text(); //获取前面输入的字符,并临时保存起来
189     line.clear(); //清空字符数组
190     ui->lineEdit->setText(line);//显示清空状态
191 }
192 
193 
194 void Widget::mul()//乘法
195 {
196     flag5 = 1;//按了加号按键就改变状态
197     temp1 = ui->lineEdit->text(); //获取前面输入的字符,并临时保存起来
198     line.clear(); //清空字符数组
199     ui->lineEdit->setText(line);//显示清空状态
200 }
201 
202 void Widget::equal() //得出结果
203 {
204     flag1 = 1; //按一次等于号就改变状态
205     if(flag == 1) //加法
206     {
207         temp2 = ui->lineEdit->text();
208         line.clear(); //清空字符串
209         sum = temp1.toDouble() + temp2.toDouble(); //将字符转换成浮点型
210         ui->lineEdit->setText(QString::number(sum)); //将浮点型转换成字符
211         flag = 0; //重新让标志位置零,等待下一次的加法进行
212     }
213 
214     else if(flag3 == 1) //减法
215     {
216         temp2 = ui->lineEdit->text();
217         line.clear(); //清空字符串
218         ui->lineEdit->setText(line);
219         sum = temp1.toDouble() - temp2.toDouble(); //将字符转换成浮点型
220 
221         if(sum == 0) //等于0
222         {
223             ui->lineEdit->setText("0");
224         }
225         ui->lineEdit->setText(QString::number(sum)); //将浮点型转换成字符
226             // qDebug()<<sum;
227         flag3 = 0; //重新让标志位置零,等待下一次的减法进行
228     }
229 
230     else if(flag4 == 1) //除法
231     {
232         temp2 = ui->lineEdit->text();
233         line.clear(); //清空字符串
234         sum = temp1.toDouble() / temp2.toDouble(); //将字符转换成浮点型
235         if(temp2 == "0") //分母等于0
236         {
237             ui->lineEdit->setText("0");
238         }
239         ui->lineEdit->setText(QString::number(sum)); //将浮点型转换成字符
240         flag4 = 0; //重新让标志位置零,等待下一次的除法进行
241     }
242 
243    else if(flag5 == 1) //乘法
244     {
245         temp2 = ui->lineEdit->text();
246         line.clear(); //清空字符串
247         sum = temp1.toDouble() * temp2.toDouble(); //将字符转换成浮点型
248         ui->lineEdit->setText(QString::number(sum)); //将浮点型转换成字符
249         flag5 = 0; //重新让标志位置零,等待下一次的乘法进行
250     }
251 
252 }

 

效果图如下:

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

以上是关于使用qt制作一个简单的计算器的主要内容,如果未能解决你的问题,请参考以下文章

python 用于在终端中运行的sublime text 3的简单代码片段制作工具

Qt 中简单的无键盘触摸屏小部件

使用VS2013+QT5.7.0开发简单计算器

QT 实用代码片段

如何使用多线程制作一个简单的 Qt 控制台应用程序?

从 Qt 中的信号调用成员函数的问题