Qt实现一个简略的计算器
作者:hackett
微信公众号:加班猿
一、UI界面版
运行成果:输出num1和num2抉择+-*/点击计算即可
UI界面设计:
3个lineEdit(lineEditNum1,lineEditNum2,lineEditSum)
2个PushButton(buttonClear,ButtonCalc)
1个comboBox
1个label
布局:
3个lineEdit和1个comboBox、1个label程度布局
2个PushButton和一个弹簧程度布局
最初整体布局即可
main.cpp
#include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[]){ QApplication a(argc, argv); MainWindow w; w.show(); return a.exec();}
mainwindow.cpp
#include "mainwindow.h"#include "ui_mainwindow.h"#include <QDebug>#include <QMessageBox>MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this);}MainWindow::~MainWindow(){ delete ui;}void MainWindow::on_buttonCalc_clicked(){ double num1 = ui->lineEditNum1->text().toDouble();//获取num1的值 double num2 = ui->lineEditNum2->text().toDouble();//获取num2的值 uint8_t index = ui->comboBox->currentIndex(); //获取下拉框的下标0 +, 1 - ,2 *, 3 / double result = 0.0; switch (index) { case 0: result = num1 + num2; break; case 1: result = num1 - num2; break; case 2: result = num1 * num2; break; case 3: if(num2 == 0) { QMessageBox::about(this,"留神","除数不能为0"); return; } result = num1 / num2; break; default: break; } ui->lineEditSum->setText(QString::number(result));}void MainWindow::on_buttonClear_clicked(){ ui->lineEditNum1->clear(); ui->lineEditNum2->clear(); ui->lineEditSum->clear();}
mainwindow.h
#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>namespace Ui {class MainWindow;}class MainWindow : public QMainWindow{ Q_OBJECTpublic: explicit MainWindow(QWidget *parent = 0); ~MainWindow();private slots: void on_buttonCalc_clicked();//计算结果槽函数 void on_buttonClear_clicked();//革除输入框槽函数private: Ui::MainWindow *ui;};#endif // MAINWINDOW_H
二、纯代码版
注:只能两个数独自加减乘除,不能间断运算,按‘ = ’从新开始两个数运算
main.cpp
#include "calc.h"#include <QApplication>int main(int argc, char *argv[]){ QApplication a(argc, argv); Calc w; w.show(); return a.exec();}
calc.cpp
#include "calc.h"#include <QHBoxLayout>#include <QVBoxLayout>#include <QLineEdit>#include <QSizePolicy>#include <QDebug>Calc::Calc(QWidget *parent) : QWidget(parent){ //获取字体QFont QFont font = this->font(); font.setPixelSize(30); this->setFont(font); //保留键盘值 QString keys="789-456*123/0.+="; QVBoxLayout *vbox = new QVBoxLayout(); QSizePolicy qsPolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); for(int i=0; i<4; i++) { QHBoxLayout *hbox = new QHBoxLayout(); for(int j=0; j<4; j++) { buttons[i*4+j] = new QToolButton(this); //设置文本 buttons[i*4+j]->setText(keys.mid(i*4+j, 1)); hbox->addWidget(buttons[i*4+j]); //策略设置 buttons[i*4+j]->setSizePolicy(qsPolicy); //把按钮触发信号关联槽函数 connect(buttons[i*4+j], SIGNAL(clicked(bool)),this, SLOT(buttons_chick())); } //把程度布局管理器增加到垂直布局管理器中 vbox->addLayout(hbox); } //创立一个输入框 edit = new QLineEdit(this); edit->setSizePolicy(qsPolicy); edit->setMaximumHeight(60); edit->setAlignment(Qt::AlignRight); QVBoxLayout *allVbox = new QVBoxLayout(this); allVbox->addWidget(edit); allVbox->addLayout(vbox); //初始化 firstNumber.clear(); secondNumber.clear(); calcflag = 0;}Calc::~Calc(){}void Calc::input_data(QString str){ if(calcflag == 0) { firstNumber.append(str); edit->setText(firstNumber); }else { secondNumber.append(str); edit->setText(secondNumber); }}void Calc::buttons_chick(){ //通过信号发送者获取按钮对象 QToolButton *button = (QToolButton*)sender(); //qDebug() QString str = button->text(); QString datastr = ".0123456789"; QStringList typestr; typestr<<"+"<<"-"<<"*"<<"/"; if(datastr.indexOf(str) >= 0)//获取按键值 { input_data(str); //输出数据 }else if(typestr.indexOf(str)>=0) { calcflag = typestr.indexOf(str)+1;//获取运算符号type }else //= { double result = 0.0; switch (calcflag) { case 1: result = firstNumber.toDouble()+secondNumber.toDouble(); break; case 2: result = firstNumber.toDouble()-secondNumber.toDouble(); break; case 3: result = firstNumber.toDouble()*secondNumber.toDouble(); break; case 4: result = firstNumber.toDouble()/secondNumber.toDouble(); break; default: break; } edit->setText(QString::number(result)); calcflag = 0; firstNumber.clear(); secondNumber.clear(); }}
calc.h
#ifndef CALC_H#define CALC_H#include <QWidget>#include <QToolButton>#include <QLineEdit>class Calc : public QWidget{ Q_OBJECTpublic: explicit Calc(QWidget *parent = 0); ~Calc(); void input_data(QString str); protected slots: void buttons_chick();//按键槽函数private: QToolButton *buttons[16]; //按钮数组 QLineEdit *edit; //输入框 QString firstNumber; //记录输出第一个数值 QString secondNumber; //记录输出第一个数值 int calcflag; //1-add, 2-sub, 3-mul, 4-div};#endif // CALC_H
如果你感觉文章还不错,记得"点赞关注"
关注我的微信公众号【 加班猿 】能够获取更多内容