Qt实践之简易计算器的设计[附GitHub项目下载地址] 您所在的位置:网站首页 简易计算器免费下载安装苹果 Qt实践之简易计算器的设计[附GitHub项目下载地址]

Qt实践之简易计算器的设计[附GitHub项目下载地址]

2024-07-08 07:09| 来源: 网络整理| 查看: 265

简易计算器运用了MVC的设计模式,自己的C++底子薄,还没有接触到设计模式,MVC算是第一个.接下来的日子里我每会记录C++的心得与体会,跟进学习的效率.

话不多说,本文是参考网易云课堂的视频自己亲自回忆编写的,不足之处请大家指正批评.

项目代码已上传GitHub,戳此下载

                                             

第一步:在Qt设计师布局相应的按钮和显示文本,然后更改对象名称便于程序的书写,我的按钮对应的对象名如下:

                                                      

这既是MVC中的View,C(Control)的话就是其实是一个概念,即用Model去控制View实现二者之间的"通讯".

第二步:新建C++类编写我们的model,为控制View做准备

头文件如下:

#ifndef MODEL_H #define MODEL_H #include class model { public: model(); void setNum1(int num);//设置第一个数 void setNum2(int num);//设置第二个数 void setFlag(QString flag);//设置操作符 QString doExpr();//进行运算 private: int num1; int num2; //int result; QString flag; }; #endif // MODEL_H

.cpp如下

#include "model.h" //处理数据模型 model::model() { //初始化 this->num1=0; this->num2=0; } void model::setNum1(int num) { this->num1=num; } void model::setNum2(int num) { this->num2=num; } void model::setFlag(QString flag) { this->flag=flag; } QString model::doExpr() { int result=0; if(this->flag=="+") { result=this->num1+this->num2; } else if(this->flag=="-") { result=this->num1-this->num2; } else if(this->flag=="*") { result=this->num1*this->num2; } else if(this->flag=="/") { if(this->num2==0) { return "EREEOR"; } result=this->num1/this->num2; } else { return QString::number( this->num1);//将数字转换成字符串 } return QString::number(result);//将数字转换成字符串,因为最后显示数字,再将字符串转换回数字 }

主程序的头文件如下:

#ifndef CALCULATORUI_H #define CALCULATORUI_H #include #include #include namespace Ui { class CalculatorUI; } class CalculatorUI : public QDialog { Q_OBJECT public: explicit CalculatorUI(QWidget *parent = 0); ~CalculatorUI(); private slots: void getBut0(); void getBut1(); void getBut2(); void on_btn_3_clicked(); void on_btn_4_clicked(); void on_btn_5_clicked(); void on_btn_6_clicked(); void on_btn_7_clicked(); void on_btn_8_clicked(); void on_btn_9_clicked(); void on_btn_add_clicked(); void on_btn_sub_clicked(); void on_btn_mul_clicked(); void on_btn_div_clicked(); void on_btn_equal_clicked(); void on_btn_clear_clicked(); private: QString temp; Ui::CalculatorUI *ui;//界面对象 model* mode; //核心功能的model类的对象 }; #endif // CALCULATORUI_H

主窗口的.cpp代码如下:

#include "calculatorui.h" #include "ui_calculatorui.h" CalculatorUI::CalculatorUI(QWidget *parent) : QDialog(parent), ui(new Ui::CalculatorUI) { ui->setupUi(this); connect(this->ui->btn_0,SIGNAL(clicked(bool)),this,SLOT(getBut0())); connect(this->ui->btn_1,SIGNAL(clicked(bool)),this,SLOT(getBut1())); connect(this->ui->btn_2,SIGNAL(clicked(bool)),this,SLOT(getBut2())); this->mode = new model; this->temp="";//初始化为空字符串 } CalculatorUI::~CalculatorUI() { delete ui; } void CalculatorUI::getBut0() { if(this->temp!="") { this->temp+=this->ui->btn_0->text();//获取0数字并与temp拼接 this->ui->label_display->setText(this->temp);//显示在屏幕上,以下同理 } } void CalculatorUI::getBut1() { this->temp+=this->ui->btn_1->text(); this->ui->label_display->setText(this->temp); } void CalculatorUI::getBut2() { this->temp+=this->ui->btn_2->text(); this->ui->label_display->setText(this->temp); } void CalculatorUI::on_btn_3_clicked() { this->temp+=this->ui->btn_3->text(); this->ui->label_display->setText(this->temp); } void CalculatorUI::on_btn_4_clicked() { this->temp+=this->ui->btn_4->text(); this->ui->label_display->setText(this->temp); } void CalculatorUI::on_btn_5_clicked() { this->temp+=this->ui->btn_5->text(); this->ui->label_display->setText(this->temp); } void CalculatorUI::on_btn_6_clicked() { this->temp+=this->ui->btn_6->text(); this->ui->label_display->setText(this->temp); } void CalculatorUI::on_btn_7_clicked() { this->temp+=this->ui->btn_7->text(); this->ui->label_display->setText(this->temp); } void CalculatorUI::on_btn_8_clicked() { this->temp+=this->ui->btn_8->text(); this->ui->label_display->setText(this->temp); } void CalculatorUI::on_btn_9_clicked() { this->temp+=this->ui->btn_9->text(); this->ui->label_display->setText(this->temp); } void CalculatorUI::on_btn_add_clicked() { int num = this->temp.toInt(); this->mode->setNum1(num); this->temp="";//保证按下加减乘除后屏幕第二个数字能够呈现 QString ex=this->ui->btn_add->text(); this->mode->setFlag(ex); } void CalculatorUI::on_btn_sub_clicked() { int num = this->temp.toInt(); this->mode->setNum1(num); this->temp=""; QString ex=this->ui->btn_sub->text(); this->mode->setFlag(ex); } void CalculatorUI::on_btn_mul_clicked() { int num = this->temp.toInt(); this->mode->setNum1(num); this->temp=""; QString ex=this->ui->btn_mul->text(); this->mode->setFlag(ex); } void CalculatorUI::on_btn_div_clicked() { int num = this->temp.toInt(); this->mode->setNum1(num); this->temp=""; QString ex=this->ui->btn_div->text();//读取的操作 this->mode->setFlag(ex); } void CalculatorUI::on_btn_equal_clicked() { int num=this->temp.toInt(); this->mode->setNum2(num); QString res= this->mode->doExpr(); this->ui->label_display->setText(res); this->temp=""; } void CalculatorUI::on_btn_clear_clicked() { this->temp=""; this->ui->label_display->setText("0"); }

当然了,这个计算器存在很多缺陷,例如显示越界问题,显示数字最好用LCD管,后续再向里面添加三角函数,回归方程之类的东西,让计算器更加智能



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有