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

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

    第一步

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

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

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

    第二步

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

    QLineEdit *le_lcd; //設置一個單行文本輸入框 QPushButton *bt_num[10]; //設置1,2,3...9,0;十個鍵位,單獨new出10個按鍵來,對我們程序員來說是很傻的做法,怎么簡便怎么來,所以我們用指針數(shù)組來實現(xiàn) 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("

    第四步

    控件已經(jīng)準備完畢,有了聲明和空間,現(xiàn)在我們來進行這些控件的布局

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

    QHBoxLayout *hbox = new QHBoxLayout; //水平布局按鍵 hbox->addWidget(le_lcd); hbox->addWidget(bt_chop); QGridLayout *gbox = new QGridLayout; //網(wǎng)格布局按鍵 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里面裝了前面兩個布局

    第五步

    設置槽函數(shù)聲明

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

    第六步

    設置前后臺相關聯(lián)的信號與槽

    for(int i=0; i

    第七步

    槽函數(shù)具體實現(xiàn)

    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. 提取第一個運算數(shù) 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. 顯示數(shù)據(jù) 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); //按鍵槽函數(shù) 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. 前后臺關聯(lián) 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. 提取第一個運算數(shù) 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. 顯示數(shù)據(jù) 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(); }

    效果圖:


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

    返回頂部

    主站蜘蛛池模板: 人体内射精一区二区三区| 精品久久久久中文字幕一区| 五十路熟女人妻一区二区| 日韩免费观看一区| 日韩美女视频一区| 日本在线视频一区| 亚洲中文字幕无码一区二区三区| 日本人真淫视频一区二区三区| AV无码精品一区二区三区| 一区二区不卡在线| 冲田杏梨AV一区二区三区| 午夜一区二区在线观看| 中文字幕国产一区| 亚拍精品一区二区三区| 精品91一区二区三区| 久久国产一区二区| 色噜噜狠狠一区二区三区| 精品国产一区二区三区AV性色| 色精品一区二区三区| 色窝窝无码一区二区三区成人网站| 亚洲国产一区在线观看| 性色AV 一区二区三区| 亚洲影视一区二区| 国产一区二区四区在线观看 | 视频在线观看一区二区三区| 538国产精品一区二区在线| AV天堂午夜精品一区| 国内精品一区二区三区最新 | 国产日韩视频一区| 91精品福利一区二区三区野战| 福利在线一区二区| 性色av闺蜜一区二区三区| 秋霞无码一区二区| 亚洲AV综合色区无码一区| 国产精品一区12p| 丰满岳妇乱一区二区三区| 成人H动漫精品一区二区| 成人h动漫精品一区二区无码| 午夜影院一区二区| 午夜视频在线观看一区| 亚洲av无码片vr一区二区三区 |