用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
widget.cpp
#include "widget.h"
#include
main.cpp
#include "widget.h"
#include
效果圖: