前言:今天使用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 }
效果圖如下:
如果有什么建議或者疑惑的地方可以私聊我。