文章目录

  • 1 计算器程序界面分析
  • 2 计算器界面程序实现
    • 2.1 计算器界面程序初步实现
    • 2.2 计算器界面代码重构

1 计算器程序界面分析

程序界面如下:

界面设计:

  • 定义组件间的间隔:

    • Space = 10px
  • 定义按钮组件的大小:
    • Width = 40px,Height = 40px
  • 定义文本框组件的大小:
    • Width = 5 * 40px + 4 * 10px, Height = 30px


对于Qt应用程序开发:

  • GUI应用程序开发前必须进行界面设计。
  • GUI应用程序界面需要考虑各个细节:
    • 界面决定最终用户的体验。
    • 界面细节是GUI应用程序品质的重要体现。
  • Qt库有能力实现各种GUI应用程序需求。
  • Qt帮助文档的使用对于开发是非常重要的。

2 计算器界面程序实现

2.1 计算器界面程序初步实现

初步实现的代码如下:

#include <QtGui/QApplication>
#include <QWidget>
#include <QLineEdit>
#include <QPushButton>int main(int argc, char *argv[])
{QApplication a(argc, argv);QWidget* w = new QWidget(NULL, Qt::WindowCloseButtonHint);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;
}

运行效果如下:

2.2 计算器界面代码重构

在重构前先了解下重构的基本概念,什么是软件开发过程中的重构呢?

重构(Refactoring)是以改善代码质量为目的的代码重写:

  • 使其软件的设计与架构更加合理。
  • 提高软件的扩展性和维护性。

代码实现与代码重构不同:

  • 代码实现:

    • 按照设计编程实现,重心在于功能实现。
  • 代码重构:
    • 以提高代码质量为目的的软件架构优化。

区别:

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

下面简单看一下软件开发过程:

  • 从工程的角度对软件开发中的活动进行定义和管理。

    再来看一下什么样的代码需要重构:
  • 当发现项目中重复的代码越来越多时。
  • 当发现项目中代码功能越来越不清晰时。
  • 当发现项目中代码离设计越来越远时。

重构的进行:

  • 重构是维持代码质量在可接受范围内的重要方式。
  • 重构的时机和方式由项目组使用的软件开发过程(Process)决定。

计算器界面代码重构:

目录结构如下:

QCalculatorUI.h:

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

QCalculatorUI.cpp:

#include "QCalculatorUI.h"QCalculatorUI::QCalculatorUI() : QWidget(NULL, Qt::WindowCloseButtonHint)
{}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);}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());
}QCalculatorUI::~QCalculatorUI()
{}

main.cpp:

#include <QtGui/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;
}

注意:上述代码中使用了二阶构造模式,在Qt中如果动态内存申请失败的话会抛出bad_alloc异常,所以不能使用NULL对返回值进行判断,这样做是徒劳的。我们需要使用try catch进行异常捕获,如果抛出了异常再返回NULL。


参考资料:

  1. QT实验分析教程

计算器界面分析及界面程序实现相关推荐

  1. 用vb编制一个计算机程序,VB程序题:编一模拟袖珍计算器的完整程序,界面如下图所示。要求:输入两个操作数和一个操作符,根据操作符决定所做的运算。 VB源码 龚沛曾...

    VB程序题:编一模拟袖珍计算器的完整程序,界面如下图所示.要求:输入两个操作数和一个操作符,根据操作符决定所做的运算. VB源码 龚沛曾 提示: 1.为了程序运行正确,对存入操作符的文本框Text3, ...

  2. 怎样用C/C++开发图形界面(GUI)程序——点名器示例

    怎样用C/C++开发图形界面(GUI)程序--点名器示例 原文链接:https://mp.weixin.qq.com/s/O9PXaibAyd__ONBBASYI_Q 仍旧是Via What系列,昨天 ...

  3. LR学习笔记三 之 界面分析

    第三讲 LR界面分析 Controller 可以使用LR Controller来管理和维护方案 LR使您可以从一个单一的控制点简单有效地控制所有的Vuser 启动:LR->Application ...

  4. BT源代码学习心得(九):客户端源代码分析(图形界面浅析) -- 转贴自 wolfenstein (NeverSayNever)

    BT源代码学习心得(九):客户端源代码分析(图形界面浅析)  author:wolfenstein 客户端将从btdownloadgui.py开始进行分析,这样可以顺便把Python中的GUI编程也看 ...

  5. 人机交互技术课程实验报告《外卖管理》系统Web界面分析报告

    人机交互技术课程实验报告 <外卖管理>系统Web界面分析报告 班级: 学号: 姓名: 需求分析[U1] 1.1系统功能介绍[02] <外卖管理系统>是一个有订餐需求的用户和商家 ...

  6. 【可视化分析】界面/系统

    分享两个关于python界面设计的实习项目. 即使慢,驰而不惜,纵令落后,纵令失败,但一定可以达到他所向往的目标.(鲁迅) [项目一] 项目一为利用python结合雷达图与柱状图设计的可视化可筛选的界 ...

  7. win10锁屏c语言,怎样在Win10锁屏界面打开任意应用程序?

    正常情况下,Windows10正式版系统的锁屏界面右下角都会有一个"轻松使用"按钮.这个按钮能够给有特殊需求的用户提供不少便利,例如放大镜.讲述人和屏幕键盘等.不过,如果你用不到这 ...

  8. win10锁屏c语言,怎样在Win10锁屏界面打开任意应用程序【图文教程】

    正常情况下,Windows10正式版系统的锁屏界面右下角都会有一个"轻松使用"按钮.这个按钮能够给有特殊需求的用户提供不少便利,例如放大镜.讲述人和屏幕键盘等.不过,如果你用不到这 ...

  9. 3D打印切片软件--cura的二次开发(2)(界面分析与汉化)(修改版增加图片)

    转载:https://blog.csdn.net/qq_29701359/article/details/75070507 在上次把CUR软件从github网站clone下来并在windows8系统, ...

最新文章

  1. html中legend设置大小,HTML_如何给 legend 标签设定宽度,我们在做表单的时候经常会使 - phpStudy...
  2. dockefile nginx php,dockerfile自动部署nginx+php7
  3. html怎么将页面放到中间,HTML – 如何将div放在另外两个(左和右)div之间?
  4. python中继承是什么意思_如何理解Python中的继承?python入门
  5. 《金蝶ERP—K/3标准财务模拟实训(11.X版)》——第1章 金蝶K/3标准财务介绍 1.1 金蝶K/3标准财务系统介绍...
  6. html选择器是什么,CSS3选择器是什么?
  7. 可输入可选择的input
  8. linux 的空命令:(冒号)
  9. ubuntu16.04下安装openssh-server报依赖错误的解决方法
  10. Java 建模:子整体软件开发
  11. 常见数通设备镜像制作模板
  12. php面向对象代码_PHP 面向对象实现代码
  13. 2022安徽合肥经济技术开发区招聘社区工作者冲刺试题及答案
  14. 奔图m7100dw_奔图M7100dW驱动
  15. html 怎么做图标在圆圈上旋转,纯CSS3图标旋转效果
  16. 自步学习-Self-paced Learning
  17. Virtuoso Layout 系列教程:01 软件安装教程 - 附资源包
  18. 【软件工程】决策表和决策树
  19. 浅谈如何做好督查督办工作?
  20. c语言已知祖父年龄70,实验三循环结构程序设计.doc

热门文章

  1. 【Python】调用百度云API文字识别服务 OCR
  2. 【控制】滑动模式观测器 sliding mode observer
  3. 【控制】《多智能体系统一致性协同演化控制理论与技术》纪良浩老师-第2章-周期间歇脉冲控制下多智能体系统一致性
  4. 【Matlab 图像】边缘检测算法及效果演示
  5. Ardino基础教程 20_红外遥控
  6. 嵌入式linux系统架构
  7. 基础篇-verilog-按位与和逻辑与
  8. 【DIY】不到20元,升级热水器加装远程wifi控制功能,esp8266远程红外控制热水器启动...
  9. Netflix Play API:我们为什么构建了一个演进式架构?
  10. 2018-2019-1 20165335 《信息安全系统设计基础》第六周学习总结