一区二区日本_久久久久久久国产精品_无码国模国产在线观看_久久99深爱久久99精品_亚洲一区二区三区四区五区午夜_日本在线观看一区二区

QT基礎練手小程序簡單計算器設計(附帶源碼,解析)

用qt設計一個計算器的小程序是十分新手來練習的,在這里來教大家怎么實現一個最最簡單的四則運算計算器。愛掏網 - it200.com

第一步

1.首先,我覺得我們應該構思出來我們想要的計算機具有哪些功能,大體布局,這是一個簡單的小程序例子,所以我就不考慮復雜的功能了,可能存在很多bug。愛掏網 - it200.com

2.再簡單的計算器,四則運算應該還是具備的,+,-,*,/,然后再來一個等于,一個清除

3.關于屏幕上應該具有0-9十個數字,加減乘除,等于,清除最后帶上一個顯示文本框一共17個按鍵

第二步

1.既然我們已經想好了有什么樣的控件,那我們首先聲明出來未來需要的控件

QLineEdit *le_lcd; //設置一個單行文本輸入框 QPushButton *bt_num[10]; //設置1,2,3...9,0;十個鍵位,單獨new出10個按鍵來,對我們程序員來說是很傻的做法,怎么簡便怎么來,所以我們用指針數組來實現 QPushButton *bt_add; //設置一個+法按鍵 QPushButton *bt_sub; //設置一個—法按鍵 QPushButton *bt_mul; //設置一個乘法按鍵 QPushButton *bt_div; //設置一個除法按鍵 QPushButton *bt_calc; //設置一個確認等于按鍵 QPushButton *bt_chop; //設置清除一個字符按鍵

第三步

1.然后我們應該把聲明出的控件給new出來

le_lcd = new QLineEdit; bt_chop = new QPushButton("

第四步

控件已經準備完畢,有了聲明和空間,現在我們來進行這些控件的布局

為了幫助大家了解布局,我不會只用一種布局

QHBoxLayout *hbox = new QHBoxLayout; //水平布局按鍵 hbox->addWidget(le_lcd); hbox->addWidget(bt_chop); QGridLayout *gbox = new QGridLayout; //網格布局按鍵 int i = 0; for(int y=0; yaddWidget(bt_num[i++], y, x); gbox->addWidget(bt_num[9],3,0); gbox->addWidget(bt_add, 0, 3); gbox->addWidget(bt_sub, 1, 3); gbox->addWidget(bt_mul, 2, 3); gbox->addWidget(bt_div, 3, 1); gbox->addWidget(bt_calc, 3, 2, 1, 2); QVBoxLayout *mainbox = new QVBoxLayout; //垂直布局按鍵 mainbox->addLayout(hbox); mainbox->addLayout(gbox); setLayout(mainbox); //這里的意思是,整體是一個垂直布局,mainbox里面裝了前面兩個布局

第五步

設置槽函數聲明

public slots: void num_pressed(void); //按鍵槽函數 void del_num(void); //刪除一個輸入 void get_op(void); //運算符按鍵槽 void calculate(); //計算槽

第六步

設置前后臺相關聯的信號與槽

for(int i=0; i

第七步

槽函數具體實現

void Widget::del_num() //刪除一個輸入 { QString str = le_lcd->text(); str.chop(1); le_lcd->setText(str); } //運算符按鍵槽 void Widget::get_op() { //1. 提取按鍵 QPushButton *xbt = static_cast( sender() ); //2. 保存符號 op = xbt->text().toStdString().c_str()[0]; //3. 提取第一個運算數 data1 = le_lcd->text().toInt(); le_lcd->clear(); } void Widget::calculate() //計算槽 { //0. 提取data2 data2 = le_lcd->text().toInt(); //1. 計算 int answer; switch (op) { case '+': answer = data1 + data2; break; case '-': answer = data1 - data2; break; case '*': answer = data1 * data2; break; case '/': answer = data1 / data2; break; default: break; } //2. 顯示 le_lcd->setText(QString::number(answer)); } void Widget::num_pressed(void) //運算符按鍵槽 { //1. 提取按鍵 QPushButton *xbt = static_cast( sender() ); //2. 顯示數據 le_lcd->setText(le_lcd->text().append(xbt->text())); }

第八步

返回去在頭文件聲明那里定義我們計算用到的東西

char op; int data1; int data2;

第九步

美化一下

//5.美化(QSS) this->setStyleSheet("QPushButton{" "color:red;" "background-color:rgb(8,189,253);" "border-radius:3px;" "};");

完整代碼

widget.h

#ifndef WIDGET_H #define WIDGET_H #include #include #include class Widget : public QWidget { Q_OBJECT public slots: void num_pressed(void); //按鍵槽函數 void del_num(void); //刪除一個輸入 void get_op(void); //運算符按鍵槽 void calculate(); //計算槽 public: Widget(QWidget *parent = 0); ~Widget(); //1. 申明出未來需要的控件 QLineEdit *le_lcd; QPushButton *bt_num[10]; QPushButton *bt_add; QPushButton *bt_sub; QPushButton *bt_mul; QPushButton *bt_div; QPushButton *bt_calc; QPushButton *bt_chop; char op; int data1; int data2; }; #endif // WIDGET_H

widget.cpp

#include "widget.h" #include #include #include Widget::Widget(QWidget *parent) : QWidget(parent) { //2. 將控件都new出來 le_lcd = new QLineEdit; bt_chop = new QPushButton("addWidget(le_lcd); hbox->addWidget(bt_chop); QGridLayout *gbox = new QGridLayout; int i = 0; for(int y=0; yaddWidget(bt_num[i++], y, x); gbox->addWidget(bt_num[9],3,0); gbox->addWidget(bt_add, 0, 3); gbox->addWidget(bt_sub, 1, 3); gbox->addWidget(bt_mul, 2, 3); gbox->addWidget(bt_div, 3, 1); gbox->addWidget(bt_calc, 3, 2, 1, 2); QVBoxLayout *mainbox = new QVBoxLayout; mainbox->addLayout(hbox); mainbox->addLayout(gbox); setLayout(mainbox); //4. 前后臺關聯 for(int i=0; isetStyleSheet("QPushButton{" // "color:red;" // "background-color:rgb(8,189,253);" // "border-radius:3px;" // "};"); } void Widget::del_num() { QString str = le_lcd->text(); str.chop(1); le_lcd->setText(str); } void Widget::get_op() { //1. 提取按鍵 QPushButton *xbt = static_cast( sender() ); //2. 保存符號 op = xbt->text().toStdString().c_str()[0]; //3. 提取第一個運算數 data1 = le_lcd->text().toInt(); le_lcd->clear(); } void Widget::calculate() { //0. 提取data2 data2 = le_lcd->text().toInt(); //1. 計算 int answer; switch (op) { case '+': answer = data1 + data2; break; case '-': answer = data1 - data2; break; case '*': answer = data1 * data2; break; case '/': answer = data1 / data2; break; default: break; } //2. 顯示 le_lcd->setText(QString::number(answer)); } void Widget::num_pressed(void) { //1. 提取按鍵 QPushButton *xbt = static_cast( sender() ); //2. 顯示數據 le_lcd->setText(le_lcd->text().append(xbt->text())); } Widget::~Widget() { }

main.cpp

#include "widget.h" #include int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; w.show(); return a.exec(); }

效果圖:


聲明:所有內容來自互聯網搜索結果,不保證100%準確性,僅供參考。如若本站內容侵犯了原著者的合法權益,可聯系我們進行處理。
發表評論
更多 網友評論0 條評論)
暫無評論

返回頂部

主站蜘蛛池模板: 免费av网站在线观看 | 91精品久久久久久久久久 | 91成年人| 国产成人免费在线观看 | 中文字幕亚洲一区 | 超碰在线观看免费 | 深夜福利视频网站 | 欧美一级片在线观看 | 免费黄色一级 | 午夜小视频在线观看 | 美女无遮挡网站 | 亚洲精品一区二区三区精华液 | 国产精品hd| 成人片免费看 | 一级特黄色片 | 成人在线免费视频观看 | 国产精品美女久久久 | 色婷婷国产| 中文在线视频 | 国产无遮挡又黄又爽免费网站 | 黄色a毛片| 特级淫片裸体免费看 | 狠狠干在线视频 | 天天爱夜夜操 | 天天有av| 欧美一级黄色片 | 日韩成人一区二区 | 免费视频久久久 | 在线黄色av | 久久99深爱久久99精品 | 九九九九精品 | 91理论片午午伦夜理片久久 | 伊人久久影院 | 国产黄色在线 | 成人毛片100免费观看 | 毛片网站在线观看 | 黑人操亚洲女人 | 三级福利视频 | 18精品爽国产白嫩精品 | 涩涩视频免费看 | 91午夜理伦私人影院 |