第12章 Qt项目实战之计算器
好文章,来自【福优学苑@音视频+流媒体】
第12章 Qt项目实战之计算器
12.1 简介
计算器的样子模仿Windows自带的计算器,但是简化了一些。
一整体方案设计
本设计总体可分为两个部分,界面设计部分和内部逻辑部分。
界面设计入上图所示一些按钮和一个QLineEdit(用于输入数字和显示结果)和QLabel(用于显示运算表达式)。
主要是采用界面设计师(直接拖拽设计)和代码设计部分。
基本上外部的垂直布局里面套了个网格布局(网格布局里主要是处于下方的按钮)
12.2 MVC框架
MVC(Model-View-Controller)框架
其实从字面意思来说,只能了解各大概,view应该是视图的意思,那Model和Controller究竟是什么?
Model: 处理数据逻辑和程序运行状态,实体类,用于存储属性值
View: 则只负责显示
Controller: 通常负责处理用户交互的部分,从视图读取数据与用户输入,并向模型发送数据;这里顺便提一下,在Qt里面我们并没有Controller的概念,而是Delegate(委托),意义很明显:控制器委托模型来处理数据,模型委托控制器来做数据的交互。
这样的框架好处是很明显的:
- 高重用性:一个模型可以有多个视图,同样一个视图也可以对应多个模型
- 低耦合:因为模型与视图分离,所以可以独立的拓展和修改而不产生相互的影响
- 快速开发和便捷部署
12.3 创建工程
打开Qt Creator
点击New Project 创建工程
选择Qt Widgets Application,点击Choose,
按照提示,填写名称和路径,然后下一步。
选择基类是QWidget,类名为Widget.(或者自己取名)
然后下一步。
然后点完成。
程序创建好了。
12.4 界面设计(View)
双击后缀为.ui的文件,进入设计界面。
我们在这里进行布局。
模仿windows系统自带计算器,我们设计的计算器的界面为:
设计界面的操作比较简单:上面是一个LineEdit和一个Label,用于显示,
下面是4x4的按钮区(Push Button)。
设置好界面后,为了方便后面的操作,我们要修改它们的名字。
例如按钮C:功能是清除,名字就改成btn_clear.
12.5 模型代码(Model)
右击我们的项目,选择添加新文件,C++,C++ Class。
然后类名就叫model,
model.h代码如下:
#ifndef MODEL_H
#define MODEL_H
#include<QString>
class model
{
public:
model();
//设置数字
void setNum1(int num);
void setNum2(int num);
//设置符号
void setFlag(QString flag);
//计算
QString doExpr();
private:
//用于计算的2个数字num1,num2,符号flag
int num1;
int num2;
QString flag;
};
#endif // MODEL_H
model.cpp代码如下:
void model::setNum1(int num)
{
num1 = num;
}
void model::setNum2(int num)
{
num2 = num;
}
void model::setFlag(QString flag)
{
this->flag = flag;
}
QString model::doExpr()
{
int result = 0;
if(flag == "+")
result = num1 + num2;
else if(flag == "-")
result = num1 - num2;
else if (flag == "*")
result = num1 * num2;
else if(flag == "/")
{
if(num2 == 0)
return "error";
else
result = num1 / num2;
}
return QString::number(result);
}
12.6 控制器(Controller)
将模型和界面(在窗口初始化时,即构造函数中)连接起来。
方式: 信号槽
直接在界面设计的地方点击按钮--转到槽,写槽函数。
private slots:
void on_pushButton_clear_clicked();
void on_pushButton_000_clicked();
void on_pushButton_001_clicked();
void on_pushButton_002_clicked();
void on_pushButton_003_clicked();
void on_pushButton_004_clicked();
void on_pushButton_005_clicked();
void on_pushButton_006_clicked();
void on_pushButton_007_clicked();
void on_pushButton_008_clicked();
void on_pushButton_009_clicked();
void on_pushButton_add_clicked();
void on_pushButton_equal_clicked();
void on_pushButton_sub_clicked();
void on_pushButton_mul_clicked();
void on_pushButton_div_clicked();
好文章,来自【福优学苑@音视频+流媒体】
***【在线视频教程】***