计算器界面分析及界面程序实现
文章目录
- 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。
参考资料:
- QT实验分析教程
计算器界面分析及界面程序实现相关推荐
- 用vb编制一个计算机程序,VB程序题:编一模拟袖珍计算器的完整程序,界面如下图所示。要求:输入两个操作数和一个操作符,根据操作符决定所做的运算。 VB源码 龚沛曾...
VB程序题:编一模拟袖珍计算器的完整程序,界面如下图所示.要求:输入两个操作数和一个操作符,根据操作符决定所做的运算. VB源码 龚沛曾 提示: 1.为了程序运行正确,对存入操作符的文本框Text3, ...
- 怎样用C/C++开发图形界面(GUI)程序——点名器示例
怎样用C/C++开发图形界面(GUI)程序--点名器示例 原文链接:https://mp.weixin.qq.com/s/O9PXaibAyd__ONBBASYI_Q 仍旧是Via What系列,昨天 ...
- LR学习笔记三 之 界面分析
第三讲 LR界面分析 Controller 可以使用LR Controller来管理和维护方案 LR使您可以从一个单一的控制点简单有效地控制所有的Vuser 启动:LR->Application ...
- BT源代码学习心得(九):客户端源代码分析(图形界面浅析) -- 转贴自 wolfenstein (NeverSayNever)
BT源代码学习心得(九):客户端源代码分析(图形界面浅析) author:wolfenstein 客户端将从btdownloadgui.py开始进行分析,这样可以顺便把Python中的GUI编程也看 ...
- 人机交互技术课程实验报告《外卖管理》系统Web界面分析报告
人机交互技术课程实验报告 <外卖管理>系统Web界面分析报告 班级: 学号: 姓名: 需求分析[U1] 1.1系统功能介绍[02] <外卖管理系统>是一个有订餐需求的用户和商家 ...
- 【可视化分析】界面/系统
分享两个关于python界面设计的实习项目. 即使慢,驰而不惜,纵令落后,纵令失败,但一定可以达到他所向往的目标.(鲁迅) [项目一] 项目一为利用python结合雷达图与柱状图设计的可视化可筛选的界 ...
- win10锁屏c语言,怎样在Win10锁屏界面打开任意应用程序?
正常情况下,Windows10正式版系统的锁屏界面右下角都会有一个"轻松使用"按钮.这个按钮能够给有特殊需求的用户提供不少便利,例如放大镜.讲述人和屏幕键盘等.不过,如果你用不到这 ...
- win10锁屏c语言,怎样在Win10锁屏界面打开任意应用程序【图文教程】
正常情况下,Windows10正式版系统的锁屏界面右下角都会有一个"轻松使用"按钮.这个按钮能够给有特殊需求的用户提供不少便利,例如放大镜.讲述人和屏幕键盘等.不过,如果你用不到这 ...
- 3D打印切片软件--cura的二次开发(2)(界面分析与汉化)(修改版增加图片)
转载:https://blog.csdn.net/qq_29701359/article/details/75070507 在上次把CUR软件从github网站clone下来并在windows8系统, ...
最新文章
- html中legend设置大小,HTML_如何给 legend 标签设定宽度,我们在做表单的时候经常会使 - phpStudy...
- dockefile nginx php,dockerfile自动部署nginx+php7
- html怎么将页面放到中间,HTML – 如何将div放在另外两个(左和右)div之间?
- python中继承是什么意思_如何理解Python中的继承?python入门
- 《金蝶ERP—K/3标准财务模拟实训(11.X版)》——第1章 金蝶K/3标准财务介绍 1.1 金蝶K/3标准财务系统介绍...
- html选择器是什么,CSS3选择器是什么?
- 可输入可选择的input
- linux 的空命令:(冒号)
- ubuntu16.04下安装openssh-server报依赖错误的解决方法
- Java 建模:子整体软件开发
- 常见数通设备镜像制作模板
- php面向对象代码_PHP 面向对象实现代码
- 2022安徽合肥经济技术开发区招聘社区工作者冲刺试题及答案
- 奔图m7100dw_奔图M7100dW驱动
- html 怎么做图标在圆圈上旋转,纯CSS3图标旋转效果
- 自步学习-Self-paced Learning
- Virtuoso Layout 系列教程:01 软件安装教程 - 附资源包
- 【软件工程】决策表和决策树
- 浅谈如何做好督查督办工作?
- c语言已知祖父年龄70,实验三循环结构程序设计.doc
热门文章
- 【Python】调用百度云API文字识别服务 OCR
- 【控制】滑动模式观测器 sliding mode observer
- 【控制】《多智能体系统一致性协同演化控制理论与技术》纪良浩老师-第2章-周期间歇脉冲控制下多智能体系统一致性
- 【Matlab 图像】边缘检测算法及效果演示
- Ardino基础教程 20_红外遥控
- 嵌入式linux系统架构
- 基础篇-verilog-按位与和逻辑与
- 【DIY】不到20元,升级热水器加装远程wifi控制功能,esp8266远程红外控制热水器启动...
- Netflix Play API:我们为什么构建了一个演进式架构?
- 2018-2019-1 20165335 《信息安全系统设计基础》第六周学习总结