zoukankan      html  css  js  c++  java
  • 计算器界面代码重构

    计算器界面代码重构
    什么是软件开发过程中的重构?
    重构(Refactoring)
    ——以改善代码质量为目的代码重写
      使其软件的设计和架构更加合理
      提高软件的扩展性和维护性

    代码实现与代码重构不同
    ——代码实现
      按照设计编程实现,重心在于功能实现
    ——代码重构
      以提高代码质量为目的软件架构设计

    区别:
    代码实现时不考虑架构的好坏,只考虑功能的实现
    代码重构时不能影响已实现的功能,只考虑架构的改善

     

     

     计算器界面代码重构

     QCalculatorUI.h

    #ifndef _QCALCULATORUI_H_
    #define _QCALCULATORUIH_
    
    #include <QWidget>
    #include <QPushButton>
    #include <QLineEdit>
    
    class QCalculatorUI : public QWidget
    {
    private:
        QLineEdit* m_edit;
        QPushButton* m_buttons[20];
    
        QCalculatorUI();
        bool construct();
    
    
    public:
        static QCalculatorUI* NewInstance();
        void show();
        ~QCalculatorUI();
    
    };
    
    #endif // _QCALCULATORUI_H_

    QCalculatorUI.cpp

    #include "QCalculatorUI.h"
    
    QCalculatorUI::QCalculatorUI(): QWidget(NULL,Qt::WindowCloseButtonHint) //此处QCalculatorUI就是作为顶层窗口存在的,虽然这个地方继承自QWidget,但是赋值为NULL,相当于它是没有父类的(但是实际上还是有的)。
                                                                            //将窗口中的最大化和最小化去掉
    {
        //因为QLineEdit与QCalculatorUI以及QPushButton与QCalculatorUI是组合关系,那么就应该同生死,因此需要在构造函数对其定义。因为此处涉及到在堆上申请内存空间,因此需要
        //使用二阶构造
    
    }
    
    bool 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);  //使QLineEdit只读
        }
        else
        {
            ret = false;
        }
    
        for(int i=0; (i<4) && ret; i++)
        {
            for(int j=0; (j<5) && ret; j++)
            {
                if(m_buttons[i*5 + j] != NULL)
                {
                    m_buttons[i*5 + j] = new QPushButton(this);
                    m_buttons[i*5 + j]->move(10 + (10 + 40)*j, 50 + (10 + 40)*i);
                    m_buttons[i*5 + j]->resize(40,40);
                    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();
        this->setFixedSize(this->width(),this->height()); //固定窗口的大小
    }
    QCalculatorUI::~QCalculatorUI()
    {
    
    }

    main.cpp

    #include <QApplication>
    #include "QCalculatorUI.h"
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        QCalculatorUI* cal = QCalculatorUI::NewInstance();
        int ret = 0;
    
        if(cal != NULL)
        {
            cal->show();
            ret = a.exec();
            delete cal; //当程序运行到最后时,将生成的cal对象释放掉。
        }
    
        return ret;
    }

  • 相关阅读:
    深入理解Guava Cache的refresh和expire刷新机制
    单机、分布式、集群的区别与联系
    理解Word2Vec
    Struts2 XML配置详解
    目标检测中的数据增强方法(附详细代码讲解)
    做笔记就用印象笔记,支持录音做笔记( 附剪藏 插件下载,一键将网页内容保存笔记中进行编辑)
    教你用OpenCV 和 Python给证件照换底色(蓝底 <->红底->白底)
    一招教你如何用Word直接打开PDF进行编辑,无需下载转换软件
    小白也能弄得懂的目标检测YOLO系列之YOLOv1网络训练
    小白也能弄懂的目标检测YOLO系列之YOLOV1
  • 原文地址:https://www.cnblogs.com/-glb/p/12080792.html
Copyright © 2011-2022 走看看