1. 程式人生 > >Qt Creator簡單計算器的Demo

Qt Creator簡單計算器的Demo

用法 乘除 .cpp ble 數據結構 特意 mark bre temp

小編在期末數據結構課設中遇到要做可視化界面的問題,特意去學習了一下Qt的用法,今天就來給大家分享一下。

我用的是Qt5.80,當然這只是一個簡易的計算器Demo,,請大家勿噴。

技術分享圖片首先我創建了一個Qt Widgets Application中的一個對話框項目,註意不用把UI文件勾選。

最終的UI界面是這樣的:技術分享圖片

具體實現代碼如下:

 1 calculator.pro
 2 #-------------------------------------------------
 3 #
 4 # Project created by QtCreator 2018-01-05T14:55:33
 5 #
6 #------------------------------------------------- 7 8 QT += core gui 9 10 greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 11 12 TARGET = calculator 13 TEMPLATE = app 14 15 # The following define makes your compiler emit warnings if you use 16 # any feature of Qt which as been marked as
deprecated (the exact warnings 17 # depend on your compiler). Please consult the documentation of the 18 # deprecated API in order to know how to port your code away from it. 19 DEFINES += QT_DEPRECATED_WARNINGS 20 21 # You can also make your code fail to compile if you use deprecated APIs. 22 # In order to do
so, uncomment the following line. 23 # You can also select to disable deprecated APIs only up to a certain version of Qt. 24 #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 25 26 27 SOURCES += main.cpp28 calculator.cpp 29 30 HEADERS += calculator.h

 1 calculator.cpp
 2 #ifndef CALCULATOR_H
 3 #define CALCULATOR_H
 4 
 5 #include <QDialog>
 6 #include <QPushButton>
 7 #include <QLineEdit>
 8 #include <QString>
 9 class Dialog : public QDialog
10 {
11     Q_OBJECT
12 
13 public:
14     Dialog(QWidget *parent = 0);
15     ~Dialog();
16 
17 protected:
18     //聲明需要的部件;
19     QPushButton* button_0;
20     QPushButton* button_1;
21     QPushButton* button_2;
22     QPushButton* button_3;
23     QPushButton* button_4;
24     QPushButton* button_5;
25     QPushButton* button_6;
26     QPushButton* button_7;
27     QPushButton* button_8;
28     QPushButton* button_9;
29     QPushButton* button_plus;
30     QPushButton* button_minus;
31     QPushButton* button_multiply;
32     QPushButton* button_devide;
33     QPushButton* button_equal;
34     QPushButton* button_clearAll;
35 
36     QLineEdit* lineEdit;
37     QLineEdit* lineEdit_1;
38 
39     //聲明需要的變量
40     //第一個數,第二個數,運算結果;
41     float num1,num2,result;
42     QString S;//用於顯示在lineEdit裏面的字符串;
43     //等號運算符的時候,判斷是加、減、乘、除的哪一個
44     char sign;
45     int mark;//若點擊過加減乘除,mark=2,默認為1;
46 
47     //聲明處理按鈕的槽函數
48 private slots:
49     //按照ui文件默認命名規則
50     void on_button_0_clicked();
51     void on_button_1_clicked();
52     void on_button_2_clicked();
53     void on_button_3_clicked();
54     void on_button_4_clicked();
55     void on_button_5_clicked();
56     void on_button_6_clicked();
57     void on_button_7_clicked();
58     void on_button_8_clicked();
59     void on_button_9_clicked();
60 
61     void on_button_plus_clicked();
62     void on_button_minus_clicked();
63     void on_button_multiply_clicked();
64     void on_button_devide_clicked();
65     void on_button_equal_clicked();
66     void on_button_clearAll_clicked();
67 };
68 
69 #endif // CALCULATOR_H
  1 calculator.cpp
  2 #include "calculator.h"
  3 #include <QGridLayout>
  4 
  5 Dialog::Dialog(QWidget *parent)
  6     : QDialog(parent)
  7 {
  8     //初始化變量
  9     num1=0.0;
 10     num2=0.0;
 11     result=0.0;
 12     S="";//顯示在編輯框的字符串初始化為空
 13     mark=1; //表示沒有點擊過加減乘除
 14     //初始化部件對象指針
 15     button_0=new QPushButton("0");
 16     button_1=new QPushButton("1");
 17     button_2=new QPushButton("2");
 18     button_3=new QPushButton("3");
 19     button_4=new QPushButton("4");
 20     button_5=new QPushButton("5");
 21     button_6=new QPushButton("6");
 22     button_7=new QPushButton("7");
 23     button_8=new QPushButton("8");
 24     button_9=new QPushButton("9");
 25     button_plus=new QPushButton("+");
 26     button_minus=new QPushButton("-");
 27     button_multiply=new QPushButton("*");
 28     button_devide=new QPushButton("/");
 29     button_equal=new QPushButton("=");
 30     button_clearAll=new QPushButton("c");
 31 
 32     lineEdit=new QLineEdit("請輸入所要計算的值");
 33     lineEdit_1=new QLineEdit("?CL");
 34     //使用網格布局,還有水平和垂直布局
 35     QGridLayout *Grid=new QGridLayout;
 36     Grid->addWidget(lineEdit,1,1,1,4,Qt::Alignment());
 37     //參數含義:widget部件指針;所在行;所在列;行寬;列寬;對齊方式;
 38     Grid->addWidget(lineEdit_1,2,1,1,4,Qt::Alignment());
 39 
 40     Grid->addWidget(button_0,3,1,Qt::Alignment());
 41     Grid->addWidget(button_1,3,2,Qt::Alignment());
 42     Grid->addWidget(button_2,3,3,Qt::Alignment());
 43     Grid->addWidget(button_3,3,4,Qt::Alignment());
 44 
 45     Grid->addWidget(button_4,4,1,Qt::Alignment());
 46     Grid->addWidget(button_5,4,2,Qt::Alignment());
 47     Grid->addWidget(button_6,4,3,Qt::Alignment());
 48     Grid->addWidget(button_7,4,4,Qt::Alignment());
 49 
 50     Grid->addWidget(button_8,5,1,Qt::Alignment());
 51     Grid->addWidget(button_9,5,2,Qt::Alignment());
 52     Grid->addWidget(button_plus,5,3,Qt::Alignment());
 53     Grid->addWidget(button_minus,5,4,Qt::Alignment());
 54 
 55     Grid->addWidget(button_multiply,6,1,Qt::Alignment());
 56     Grid->addWidget(button_devide,6,2,Qt::Alignment());
 57     Grid->addWidget(button_equal,6,3,Qt::Alignment());
 58     Grid->addWidget(button_clearAll,6,4,Qt::Alignment());
 59 
 60     //把Grid布局設置給當前創建的對話框對象
 61     this->setLayout(Grid);   //必不可少
 62 
 63     //實現連接函數  Connect函數參數 (pushbutton,signal,this指針,slot函數)
 64     connect(button_0,SIGNAL(clicked(bool)),this,SLOT(on_button_0_clicked()));
 65     connect(button_1,SIGNAL(clicked(bool)),this,SLOT(on_button_1_clicked()));
 66     connect(button_2,SIGNAL(clicked(bool)),this,SLOT(on_button_2_clicked()));
 67     connect(button_3,SIGNAL(clicked(bool)),this,SLOT(on_button_3_clicked()));
 68     connect(button_4,SIGNAL(clicked(bool)),this,SLOT(on_button_4_clicked()));
 69     connect(button_5,SIGNAL(clicked(bool)),this,SLOT(on_button_5_clicked()));
 70     connect(button_6,SIGNAL(clicked(bool)),this,SLOT(on_button_6_clicked()));
 71     connect(button_7,SIGNAL(clicked(bool)),this,SLOT(on_button_7_clicked()));
 72     connect(button_8,SIGNAL(clicked(bool)),this,SLOT(on_button_8_clicked()));
 73     connect(button_9,SIGNAL(clicked(bool)),this,SLOT(on_button_9_clicked()));
 74 
 75     connect(button_plus,SIGNAL(clicked(bool)),this,SLOT(on_button_plus_clicked()));
 76     connect(button_minus,SIGNAL(clicked(bool)),this,SLOT(on_button_minus_clicked()));
 77     connect(button_multiply,SIGNAL(clicked(bool)),this,SLOT(on_button_multiply_clicked()));
 78     connect(button_devide,SIGNAL(clicked(bool)),this,SLOT(on_button_devide_clicked()));
 79     connect(button_equal,SIGNAL(clicked(bool)),this,SLOT(on_button_equal_clicked()));
 80     connect(button_clearAll,SIGNAL(clicked(bool)),this,SLOT(on_button_clearAll_clicked()));
 81 
 82 }
 83 
 84 Dialog::~Dialog()
 85 {
 86 
 87 }
 88 
 89 //實現槽函數
 90 void Dialog::on_button_0_clicked()
 91 {
 92     S+="0";
 93     lineEdit->setText(S);//把數據設置到編輯框
 94 
 95     if(mark==1)
 96     {
 97         num1=num1*10;//繼續添0
 98     }
 99     else
100     {
101         num2=num2*10;
102     }
103 }
104 void Dialog::on_button_1_clicked()
105 {
106     S+="1";
107     lineEdit->setText(S);
108     if(mark==1)
109     {
110         num1=num1*10+1;
111     }
112     else
113     {
114         num2=num2*10+1;
115     }
116 }
117 void Dialog::on_button_2_clicked()
118 {
119     S+="2";
120     lineEdit->setText(S);
121     if(mark==1)
122     {
123         num1=num1*10+2;
124     }
125     else
126     {
127         num2=num2*10+2;
128     }
129 }
130 void Dialog::on_button_3_clicked()
131 {
132     S+="3";
133     lineEdit->setText(S);
134     if(mark==1)
135     {
136         num1=num1*10+3;
137     }
138     else
139     {
140         num2=num2*10+3;
141     }
142 }
143 void Dialog::on_button_4_clicked()
144 {
145     S+="4";
146     lineEdit->setText(S);
147     if(mark==1)
148     {
149         num1=num1*10+4;
150     }
151     else
152     {
153         num2=num2*10+4;
154     }
155 }
156 void Dialog::on_button_5_clicked()
157 {
158     S+="5";
159     lineEdit->setText(S);
160     if(mark==1)
161     {
162         num1=num1*10+5;
163     }
164     else
165     {
166         num2=num2*10+5;
167     }
168 }
169 void Dialog::on_button_6_clicked()
170 {
171     S+="6";
172     lineEdit->setText(S);
173     if(mark==1)
174     {
175         num1=num1*10+6;
176     }
177     else
178     {
179         num2=num2*10+6;
180     }
181 }
182 void Dialog::on_button_7_clicked()
183 {
184     S+="7";
185     lineEdit->setText(S);
186     if(mark==1)
187     {
188         num1=num1*10+7;
189     }
190     else
191     {
192         num2=num2*10+7;
193     }
194 }
195 void Dialog::on_button_8_clicked()
196 {
197     S+="8";
198     lineEdit->setText(S);
199     if(mark==1)
200     {
201         num1=num1*10+8;
202     }
203     else
204     {
205         num2=num2*10+8;
206     }
207 }
208 void Dialog::on_button_9_clicked()
209 {
210     S+="9";
211     lineEdit->setText(S);
212     if(mark==1)
213     {
214         num1=num1*10+9;
215     }
216     else
217     {
218         num2=num2*10+9;
219     }
220 }
221 void Dialog::on_button_plus_clicked()
222 {
223     S+="+";
224     sign=+;//設置標記為+
225     mark=2; //讓其他按鈕知道下一個點擊的數累加到num2
226     lineEdit->setText(S);
227 }
228 void Dialog::on_button_minus_clicked()
229 {
230     S+="-";
231     sign=-;
232     mark=2;
233     lineEdit->setText(S);
234 }
235 void Dialog::on_button_multiply_clicked()
236 {
237     S+="*";
238     sign=*;
239     mark=2;
240     lineEdit->setText(S);
241 }
242 void Dialog::on_button_devide_clicked()
243 {
244     S+="/";
245     sign=/;
246     mark=2;
247     lineEdit->setText(S);
248 }
249 void Dialog::on_button_equal_clicked()
250 {
251     S+="=";
252     switch(sign)
253     {
254         case +:
255             result=num1+num2;
256             break;
257         case -:
258             result=num1-num2;
259             break;
260         case *:
261             result=num1*num2;
262             break;
263         case /:
264             result=num1/num2;
265             break;
266         default:
267             break;
268     }
269     //S+=QString::number(result,10);//該函數result必須為int型
270    // S+=QString("%1").arg(result);//float轉QString  ,S+=保留之前的式子;
271     //S+=result+‘0‘;result大於等於10時報錯
272     S=QString("%1").arg(result);
273     lineEdit_1->setText(S);
274 }
275 void Dialog::on_button_clearAll_clicked()
276 {
277     S="";
278     //S+="";無法清除
279     lineEdit->setText(S);
280     lineEdit_1->setText(S);
281     mark=1;
282     num1=0.0;
283     num2=0.0;
284     result=0.0;
285 }
 1 calculator.cpp
 2 #include "calculator.h"
 3 #include <QApplication>
 4 
 5 int main(int argc, char *argv[])
 6 {
 7     QApplication a(argc, argv);
 8     Dialog w;
 9     w.show();
10 
11     return a.exec();
12 }

本Demo中沒有用到Qt designer,但是部件的聲明和槽函數的聲明都是按照designer的默認規則書寫的。大體的思路是這樣的:在構思好總體的UI布局後,在頭文件中聲明所需要的部件,不管是按鈕、文本編輯框,還是行編輯框,都大同小異;之後在在cpp文件中實現相應的功能。該簡易的計算器Demo只能滿足兩個運算數(原諒小編為小白),通過字符串的操作將0-9,+-*/顯示在行編輯框內,最後在用戶點擊等號時,將float型的結果轉化為QString輸出。文中還使用了網格布局,在使用時千萬不可忘記把布局格式設置給當前所創建的對話框對象(this->setLayout(Grid))。

Qt Creator簡單計算器的Demo