嵌入式系统之基于QT的简单计算器.docx
《嵌入式系统之基于QT的简单计算器.docx》由会员分享,可在线阅读,更多相关《嵌入式系统之基于QT的简单计算器.docx(8页珍藏版)》请在冰豆网上搜索。
嵌入式系统之基于QT的简单计算器
嵌入式系统课程设计报告
题目:
基于QT的简单计算器
专业:
计算机科学与技术
班级:
姓名:
学号:
指导老师:
日期:
2012-12-26
第一章前言
1.1设计背景
计算器(calculator;counter)一般是指“电子计算器”,计算器是能进行数学运算的手持机器,拥有集成电路芯片,其结构简单,比现代电脑结构简单得多,可以说是第一代的电子计算机(电脑)。
计算器这一小小的程序机器实际上是从计算机中割裂出来的衍生品,虽然功能较单一,但因其操作模式的方便快捷和价格的低廉,携带方便等特点,已经被广泛应用于工程、学习、商业贸易等日常生活中,极大的方便了人们对于数字的整合运算,成为人们生活和办公中的必备品之一,深得使用者的青睐。
1.2设计目的
本程序是基于linux下的嵌入式开发,所用软件为QTCreator,程序虽然简单,但是通过本程序的设计,可以进一步了解嵌入式系统开发工具以及熟悉linux环境下的常用命令,为以后进入嵌入式领域打下一定的基础。
通过该计算器程序软件的设计,培养独立思考、综合运用所学有关相应知识的能力,更好地巩固《C++程序语言设计》和《高级程序设计》课程学习的内容,掌握工程软件设计的基本方法,强化上机动手编程能力,体验理论与实践相结合的过程。
第二章功能需求分析
2.1功能描述
本次设计的计算器在功能上大致与Windows系统自带的计算器程序相似,对于所设计的科学计算器,其功能大致为可以进行加(+)、减(-)、乘(*)、除(/)、简单算术计算。
由于接触QT时间还不太久,所以目前只能简单地实现这些功能,相信随着以后逐步的了解,本程序将实现更多的功能。
第三章开发工具简介
3.1QT简介
由于本次设计的小程序是用QTCreator所设计的,所以我觉得有必要先介绍下QT开发工具的背景。
Qt是一个1991年由奇趣科技开发的跨平台C++图形界面应用程序开发框架。
它既可以开发GUI程式,也可用于开发非GUI程式,比如控制台工具和服务器。
Qt是面向对象语言,易于扩展,并且允许组件编程。
QT所具有的优势是:
优良的跨平台特性,Qt支持下列操作系统:
MicrosoftWindows95/98,MicrosoftWindowsNT,Linux,Solaris,SunOS,HP-UX,DigitalUNIX(OSF/1,Tru64),Irix,FreeBSD,BSD/OS,SCO,AIX,OS390,QNX等等。
面向对象:
Qt的良好封装机制使得Qt的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。
Qt提供了一种称为signals/slots的安全类型来替代callback,这使得各个元件之间的协同工作变得十分简单。
丰富的API:
Qt包括多达250个以上的C++类,还提供基于模板的collections,serialization,file,I/Odevice,directorymanagement,date/time类。
甚至还包括正则表达式的处理功能。
支持2D/3D图形渲染,支持OpenGL大量的开发文档。
第四章详细设计过程
4.1开发环境的搭建
本次所用系统环境为Ubuntu10.04LTS,内核为Ubuntu搭建QT环境大致过程为:
1.安装g++,ubuntu默认是不带g++的,如果不安装的话,后面是无法进行桌面版的qt应用程序进行编译的,在终端中执行以下命令:
sudoapt-getinstallg++
2.Qt桌面版的安装
3.安装arm-linux-gcc(配置环境变量gedit/.bashrc添加路径
exportPATH=$PATH:
/opt/FriendlyARM/toolschain/4.7.4/bin)
使配置文件立即生效:
source/.bashrc或者注销logout最好重启
(arm-linux-gcc-v查看版本信息)
4.安装编译库文件
5.配置Qt编译ARM的环境(解压编译时间较长,具体过程不再赘述)
4.2程序实现
对于界面的设计,采用的网格布局作为主布局,然后使用其addWidget函数添加部件,最后实现了基本的简易计算机的界面。
程序最终界面如下:
首先创建一个工程项目,名字为jsq,接着编写各个功能部件函数,这里仍使用信函和槽连接机制,我们没有使用信号和槽编辑器,而是直接在.cpp文件中添编写其代码来实现,首先在.h文件中对各个按键进行声明,再到.cpp文件中编写相应的代码实现其功能。
例如窗体控制程序MainWidget.cpp,按钮程序myButton.cpp,计算功能则在OutputString.cpp程序代码中实现。
软件工作界面如下:
对于计算器,在界面上,点击相应的按钮,信号会随着点击传递到相应的槽函数中,并实现函数的功能,经过处理得到相应的结果。
并能够将结果输出。
下面依次介绍按钮及所连接的槽函数
相应的连接信号语句:
Button*clearAllButton=createButton(tr("Clear"),SLOT(Clear()));
//用createButton函数定义除法按钮并且与除法槽函数建立
Button*divisionButton=createButton(tr("\367"),SLOT(multiplicativeOperatorClicked()));
//定义乘法按钮
Button*timesButton=createButton(tr("\327"),SLOT(multiplicativeOperatorClicked()));
//定义减法按钮
Button*minusButton=createButton(tr("-"),SLOT(additiveOperatorClicked()));
//定义加法按钮
Button*plusButton=createButton(tr("+"),SLOT(additiveOperatorClicked()));
//定义等号按钮
Button*equalButton=createButton(tr("="),SLOT(equalClicked()));//
实现代码如下
createButton函数为自己定义的函数
//定义createButton函数需要字符串参数和一个字符指针
//在此函数内连接信号与槽
Button*Calculator:
:
createButton(constQString&text,constchar*member)
{
Button*button=newButton(text);
connect(button,SIGNAL(clicked()),this,member);
returnbutton;
}
这样每次为每个部件分配内存空间的时候就已经建立了相应的槽函数。
4.3计算功能的实现
本程序计算功能主要在OutputString.cpp中实现的,主要代码如下:
QString&myOutputString:
:
getMyString(void)
{
QStringstaticZeroStr("0");
if(myString.isEmpty())
returnZeroStr;
staticQStringtopStr;
QStringmyStr;
topStr=myString.pop();
if(isOperator(topStr)
&&(myString.count()==3))
{
QStringsecondNumStr=myString.pop();
QStringopeStr=myString.pop();
QStringfirstNumStr=myString.pop();
doublefirstNum=firstNumStr.toDouble();
doublesecondNum=secondNumStr.toDouble();
doubleequal=0;
if(opeStr=="*")
equal=firstNum*secondNum;
elseif(opeStr=="/")
equal=firstNum/secondNum;
elseif(opeStr=="+")
equal=firstNum+secondNum;
elseif(opeStr=="-")
equal=firstNum-secondNum;
QVariantvar1(equal);
myStr=var1.toString();
myString.push(myStr);
}
if(topStr!
="=")
myString.push(topStr);
topStr=myString.top();
returntopStr;
}
voidmyOutputString:
:
deleteAll(void)
{
myString.clear();
}
intmyOutputString:
:
isNumStr(QString&Str)
{
boolok=0;
Str.toInt(&ok,10);
if(ok==1)
return1;
return0;
}
第五章程序测试
输入一个操作数:
5
输入操作符:
+
输入另一个操作数:
7
点击“=”号按钮,会出现结果:
最后点击“Clear”按钮,可以清除之前的数据:
测试程序基本无误,目前只能完成简单的四则运算。
第六章课程总结
这次的简易计算机的编写,能实现基本的加减乘除算法,也能实现小数的加减乘除,通过此次的QT学习以及上学期的C++学习,深刻的了解到设计程序并不是一件简单的事情。
并且通过网上了解到QT的强大功能,虽然现在本人的技术及知识还很贫乏,但是相信通过现在及日后的学习一定可以达到自己想要达到的水平。
就这次的课程设计报告来说,从最初的相当陌生到现在的可以理解使用。
但还有一些问题没有彻底理解。
此次课程设计并没有完全构成当初想的那样,但认为还是基本满足了老师的要求。
对于以后学习嵌入式也打下了一定的基础,最后也谢谢何高明老师上课时耐心的讲解。
参考文献
[1]邹思轶.嵌入式Linux设计与应用[M].北京:
清华大学出版社,2002:
318-325.
[2]张石.ARM嵌入式系统教程[M].北京:
机械工业出版社,2012:
191-261.
[3]闫锋欣,曾泉人.C++GUIQT4编程(第二版)[M].北京:
电子工业出版社,2010:
108-232.
[4]闫放莺.基于嵌入式Linux软件平台技术的研究[D].西安:
西北大学,2006.
[5]郭兵.嵌入式软件开放式集成开发平台体系结构研究[D].成都:
电子科技大学,2002.
[6]谭浩强.C++面向对象程序设计[M].北京:
清华大学出版社,2006.69-111.