首先我们来讲讲为什么要进行代码重构?在一些大的项目中,代码重构是一个必不可少的步骤。因为项目大了,代码也就多了,后期的维护将会很难,所以我们要适当的进行代码重构,让代码的可复用性提高,使软件的设计和架构更加合理。

代码实现和代码重构有什么不同呢?代码实现的重点是功能的实现,而代码重构则是在实现功能的基础上进行再次优化,以提高代码质量。
那么什么样的代码需要重构呢?依据以往的项目开发经验来看呢,当发现项目中的重复代码越来越多时、代码功能越来越不清晰时、代码离设计越来越远时等,那么这时我们就该进行代码重构了,使得代码的质量得到提高。
有的项目也不需要进行代码重构,比如说项目较紧。这时我们也没时间去进行代码重构,那么我们就只能实现基本功能就行。
好了,废话不多说,我们撸起袖子开干了。由于上次我没有把计算器界面实现的源代码贴出来,这次就补上,大家在重构完之后可以看看代码质量是否得到了提高呢?

#include <QApplication>
#include <QLineEdit>
#include <QPushButton>int main(int argc, char *argv[])
{QApplication a(argc, argv);QWidget* w = new QWidget();QLineEdit* le = new QLineEdit(w);QPushButton* button[20] = {0};const char* btnText[20] ={"7", "8", "9", "+", "(","4", "5", "6", "-", ")","1", "2", "3", "*", "<-","0", ".", "=", "/", "C",};int ret = 0;le->move(10, 10);le->resize(240, 30);le->setReadOnly(true);for(int i=0; i<4; i++){for(int j=0; j<5; j++){button[i*5 + j] = new QPushButton(w);button[i*5 + j]->resize(40, 40);button[i*5 + j]->move(10 + (10 + 40)*j, 50 + (10 + 40)*i);button[i*5 + j]->setText(btnText[i*5 + j]);}}w->show();w->setFixedSize(w->width(), w->height());ret = a.exec();delete w;return ret;
}

我们 首先可以建一个 QCalculatorUI 类,在这个 QCalculatorUI.cpp 文件中实现所有与计算器界面相关的功能,从而 main 函数将会变得很清晰。首先我们在构造函数中得生成 QCalculatorUI 对象,但是由于考虑到生成的对象有可能会是半成品,所以我们采用二阶构造设计法来生成 QCalculatorUI 对象,依次来确保生成的对象时可用的。关于二阶构造法,是属于C++里面的知识,以后有时间给大家再做详细介绍。我们之后可以将显示等功能放在一个show函数里。那么依照目前的思想,我们建出来的 QCalculatorUI.h 文件和 QCalculatorUI.cpp 文件的相关代码就分别是这样的:
QCalculatorUI.h

    class QCalculatorUI : public QWidget{private:QLineEdit* m_edit;QPushButton* m_buttons[20];QCalculatorUI();bool construct();public:static QCalculatorUI* NewInstance();void show();~QCalculatorUI();};-----QCalculatorUI.cppbool QCalculatorUI::construct(){bool ret = true;const char* btnText[20] ={"7", "8", "9", "+", "(","4", "5", "6", "-", ")","1", "2", "3", "*", "<-","0", ".", "=", "/", "C",};m_edit = new QLineEdit(this);if( m_edit != NULL ){m_edit->move(10, 10);m_edit->resize(240, 30);m_edit->setReadOnly(true);}else{ret = false;}for(int i=0; (i<4) && ret; i++){for(int j=0; (j<5) && ret; j++){m_buttons[i*5 + j] = new QPushButton(this);if( m_buttons[i*5 + j] != NULL ){m_buttons[i*5 + j]->resize(40, 40);m_buttons[i*5 + j]->move(10 + (10 + 40)*j, 50 + (10 + 40)*i);m_buttons[i*5 + j]->setText(btnText[i*5 + j]);}else{ret = false;}}}return ret;}QCalculatorUI* QCalculatorUI::NewInstance(){QCalculatorUI* ret = new QCalculatorUI();if( (ret == NULL) || !ret->construct() ){delete ret;ret = NULL;}return ret;}void QCalculatorUI::show(){QWidget::show();setFixedSize(width(), height());}
-----
进行代码重构之后的main.cpp是这样的:
#include <QApplication>
#include "QCalculatorUI.h"int main(int argc, char *argv[])
{QApplication a(argc, argv);QCalculatorUI* cal = QCalculatorUI::NewInstance();int ret = -1;if( cal != NULL ){cal->show();ret = a.exec();delete cal;}return ret;
}

那么大家看看进行代码重构之后的main函数是不是很清晰呢?所以在进行代码实现功能的基础上,大家一定要进行代码重构。这样才能写出质量更高的代码,好了,本节就到 这了,后面我们再进行计算器的继续实现。

转载于:https://blog.51cto.com/12810168/2088114

QT之计算器代码重构(六)相关推荐

  1. Python Qt GUI快速编程第六章代码分析

    这是我敲的Python Qt Gui快速编程第六章上的代码,以后可能要用到其中一些,如果忘记了就来这里看看. #coding=utf-8 #d import os import platform im ...

  2. Qt Creator代码重构

    Qt Creator代码重构 代码重构 查找符号 查找QML类型 查看搜索结果 重命名符号 列编辑 应用重构动作 创建功能 插入虚函数 创建获取器和设置器 重构动作摘要 重构C ++代码 重构QML代 ...

  3. 【Java设计模式 规范与重构】 六 代码重构小结

    最近趁着学习劲头足,如饥似渴的把代码重构部分也学习完了,可以说9月份属实非常充实,貌似也只有学习才能导致生活没有那么无聊. 代码重构博客目录 序号 文章列表 1 [Java设计模式 规范与重构] 一 ...

  4. 步步为营 .NET 代码重构学习笔记 九

    步步为营 .NET 代码重构学习笔记系列 步步为营 .NET 代码重构学习笔记 一.为何要代码重构 步步为营 .NET 代码重构学习笔记 二.提炼方法(Extract Method) 步步为营 .NE ...

  5. 步步为营 .NET 代码重构学习笔记 十一

    步步为营 .NET 代码重构学习笔记系列 步步为营 .NET 代码重构学习笔记 一.为何要代码重构 步步为营 .NET 代码重构学习笔记 二.提炼方法(Extract Method) 步步为营 .NE ...

  6. 代码重构(二):类重构规则

    在上篇博客<代码重构(一):函数重构规则(Swift版)>中,详细的介绍了函数的重构规则,其中主要包括:Extract Method, Inline Method, Inline Temp ...

  7. 从零开始编写深度学习库(四)Eigen::Tensor学习使用及代码重构

    从零开始编写深度学习库(四)Eigen::Tensor学习使用及代码重构 博客:http://blog.csdn.net/hjimce 微博:黄锦池-hjimce   qq:1393852684 一. ...

  8. 步步为营 .NET 代码重构学习笔记 十

    步步为营 .NET 代码重构学习笔记系列 步步为营 .NET 代码重构学习笔记 一.为何要代码重构 步步为营 .NET 代码重构学习笔记 二.提炼方法(Extract Method) 步步为营 .NE ...

  9. 2021-01-22学习记录 || 通过二维数组初始化窗体并进行代码重构

    今天主要是通过二维数组将整个界面16个数字块展示出来,并为了下一步添加左移.右移功能创建子类MainFrame继承JFrame类并进行代码重构. 二维数组展示初始化界面 由于2048小游戏需要16个数 ...

最新文章

  1. 关于struts2的开始学习
  2. docker部署下的nginx负载均衡时,无法获取真实ip的问题
  3. 微信多开txt_微信(电脑版)多开教程
  4. 深入理解Linux系统中的用户和组账号
  5. Python程序-打印单词的菱形字符图案
  6. jieba(结巴)—— Python 中文分词
  7. python视频教程全集-Python 3视频教程全集(2018版)免费送啦
  8. matlab画图实例_自定义函数
  9. 服务性能测试和内存监控
  10. 人工智能机器视觉技术应用有哪些?
  11. Qt打包发布程序,打包安装程序和打包为单个exe可执行程序,图文教程
  12. 国外兼职网站列举 79个
  13. cad图纸问号怎么转换文字_CAD中文图纸中文字体变成问号怎么办?不慌这几步教你轻松解决...
  14. 计算机管理器找不到打印机驱动,电脑提示“无法找到打印机驱动程序包要求的核心驱动”解决方法...
  15. C++之个人银行账户管理程序(二)
  16. B2C,B2B,c2c是什么?
  17. macbook usb口突然不能用 解决方法
  18. 【智能商务】学习财务分析,看这10张思维导图就够啦
  19. div无法触发blur事件解决办法
  20. 计算机数制详解及相互转换(二进制、八进制、十进制、十六进制)

热门文章

  1. Spring Boot 2.2首个里程碑版本发布,改进性能和内存使用
  2. AngularJS学习日记(四)Service和Provider
  3. python数据挖掘试题四十道,你敢来挑战吗?
  4. Python 人脸识别 OpenCV (haarcascades)
  5. Oracle在linux下使用小技巧
  6. 性能分析:hash索引导致delete慢
  7. MySQL工具1:mysqladmin
  8. flex air openWithDefaultApplication 时出现Illegal ...
  9. Javascript cookie使用详解
  10. Segment Routing — SRv6 — 网络架构与应用场景