1. 程式人生 > >使用qt制作一個簡單的計算器

使用qt制作一個簡單的計算器

num ont else 什麽 get() endif ges 字符數 logs

前言:今天使用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制作一個簡單的計算器