使用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 }

效果图如下:

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

时间: 2024-08-15 00:45:56

使用qt制作一个简单的计算器的相关文章

qt实现一个简单的计算器

1.计算器的界面如下图所示 dalog.cpp #include "dialog.h" #include "ui_dialog.h" #include<QPushButton> #include<QDebug> #include<QtMath> const char *a; Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog) { ui->

使用Python3的tkinter制作一个简单的计算器界面

1 #!/usr/bin/python3 2 #-*-coding:utf-8-*- 3 import tkinter 4 import tkinter.font 5 6 class Calculate(): 7 def __init__(self): 8 self.tk=tkinter.Tk(); 9 self.tk.title("Calculate"); 10 11 self.tk.resizable(0,0); 12 self.showfont=tkinter.font.Font

【FLEX&amp;YACC】第二天制作一个简单计算器

首先写词法分析器: 词法分析器要返回记号: "+" 返回ADD "-" 返回SUB "*" 返回MUL "/" 返回DIV 输入的实数全部被当作double类型处理 换行符返回CR calc.l: %{#include <stdio.h>#include "y.tab.h"int yywrap(void){ /*免链接库文件*/    return 1;}%}%%[ \t]    { ;}&qu

利用yacc和lex制作一个小的计算器

买了本<自制编程语言>,这本书有点难,目前只是看前两章,估计后面的章节,最近一段时间是不会看了,真的是好难啊!! 由于本人是身处弱校,学校的课程没有编译原理这一门课,所以就想看这两章,了解一下编译原理,增加一下自己的软实力.免得被别人鄙视. 一.安装yacc和lex 我是在Windows下使用这两个软件的.所以使用bison代替yacc,用flex代替lex.两者的下载地址是http://sourceforge.net/projects/winflexbison/ 我的gcc环境是使用以前用过

JS实现一个简单的计算器

使用JS完成一个简单的计算器功能.实现2个输入框中输入整数后,点击第三个输入框能给出2个整数的加减乘除.效果如上: 第一步: 创建构建运算函数count(). 第二步: 获取两个输入框中的值和获取选择框的值. 提示:document.getElementById( id名 ).value 获取或设置 id名的值. 第三步: 获取通过下拉框来选择的值来改变加减乘除的运算法则. 提示:使用switch判断运算法则. 第四步:  通过 = 按钮来调用创建的函数,得到结果. 注意: 使用parseInt

iOS 制作一个简单的画板

制作简单画板 作为iOS初学者,在学习完UI的几个简单控件(UILable,UITextField,UIButton)之后,就可以制作一个简单的画图板demo,以下是具体制作流程(在MRC下),如有不足之处,还请各位大神们指教 0.0. 1.搭建界面,主要由UIButton,UITextField组成,底部的按钮是UITextField的一个自定义键盘(inputView) . - (void)viewDidLoad { [super viewDidLoad]; //创建菜单按钮 UIButto

制作一个简单的文本框输入的网页

题目:制作一个简单的网页(包含一个文本框.一个按钮),在页面上输出用户在文本框输入的内容,要求用JavaScript获取文本框内容. 一.首先利用html在网页上制作表单,代码如下: **onclick事件:onclick 事件会在对象被点击时发生. 二.利用js获取输入信息,并将其输出: 相关知识: 1.给用户确认消息,真正实现交互,使用语句confirm();给用户提示信息,实现单向通信,使用语句alert(). 三.运行结果: 1.用浏览器打开结果如下: 2.输入文本框内容,点击[提交]:

c# 自己制作一个简单的项目倒计时器

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace date { public partial class Form1 : Form { public Form1() { InitializeCompo

如何使用AEditor制作一个简单的H5交互页demo

转载自:http://www.alloyteam.com/2015/06/h5-jiao-hu-ye-bian-ji-qi-aeditor-jie-shao/ 本教程演示如何使用AEditor制作一个简单的H5交互页demo: 交互页demo地址: 点击打开H5交互页demo AEditor访问地址: http://aeditor.alloyteam.com Step1:设置页面背景颜色 首先我们设置页面的背景颜色,右击舞台点击“设置背景”: 然后在背景颜色中填上色值rgb(38, 61, 10