前言:今天使用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)); //将浮点型转换成字符
七、从字符的最后一位开始往开头的方向按位删除字符
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
line.chop(1); //尾剔除,即是从字符串后面开始按位删除,每次删除字符数组line中的一位,如果是2则是每次两位,依次类推
下面是头文件widget.h中的代码:
1 #ifndef WIDGET_H
2 #define WIDGET_H
3
4 #include
5 #include
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
4 #include
5 #include
6 #include
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()<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开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓