实验四-Qt编写简单的计算器(共17页).doc

上传人:飞****2 文档编号:14149127 上传时间:2022-05-03 格式:DOC 页数:17 大小:1.20MB
返回 下载 相关 举报
实验四-Qt编写简单的计算器(共17页).doc_第1页
第1页 / 共17页
实验四-Qt编写简单的计算器(共17页).doc_第2页
第2页 / 共17页
点击查看更多>>
资源描述

《实验四-Qt编写简单的计算器(共17页).doc》由会员分享,可在线阅读,更多相关《实验四-Qt编写简单的计算器(共17页).doc(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上实验四 Qt编写简单的计算器一、 【实验目的】1) 熟悉QtCreator的简单操作。2) 了解Qt程序编写框架。3) 了解信号和槽机制,熟练掌握信号与槽在应用程序中的使用。二、 【实验内容】1) 查看API手册,学习简单的Qt类的使用,如QLineEdit、QPushButton等。2) 用QtCreator创建工程,用Qt编写计算器程序。3) 对计算器程序进行移植。三、 【实验步骤】1. 创建工程1) 打开QtCreator,如图1所示。图12) 选择File-New File or Project,然后在弹出的对话框中选择Other Project-Empty

2、Qt project(如图2所示),然后进入下一步。图23) 定义新工程的工程名并选择保存路径(如图3所示),然后进入下一步。图34) 选择Qt版本,这里选择使用Qt4.7.1,取消对Qt in PATH的选择(如图4所示),然后进入下一步,完成新工程的创建(如图5所示)。图4图52. 计算器程序的实现计算器程序主要分以下两部分工作:一是实现计算器的图形界面;二是实现按键事件和该事件对应的功能绑定,即信号和对应处理槽函数的绑定。1) 计算器图形界面的实现通过分析计算器的功能我们可知,需要16个按键和一个显示框,同时考虑到整体的排布,还需要水平布局器和垂直布局器。通过组织这些类我们可以实现一个简

3、单的带有数字09,可以进行简单四则运算且具有清屏功能的计算器。对于这些类的具体操作会在后面的代码中详细说明。2) 信号和对应槽函数的绑定分析计算器的按键我们可以把按键事件分为以下三类,一是简单的数字按键,主要进行数字的录入,这类按键包括按键09;二是运算操作键,用于输入数学运算符号,进行数学运算和结果的显示,这类按键包括“+”,“-”,“*”,“/”,“=”;三是清屏操作键,用于显示框显示信息的清除。3) 进入刚才创建的空工程,双击左侧的Calculator.pro,在主编辑框中目前显示Calculator.pro的内容为空,如图6所示。这是因为目前什么文件都没有添加的缘故。图64) 添加文件

4、calculator.h在工程Calculator上面点击右键,然后点击Add New,选择添加C+ Header File(如图7所示),进入下一步后输入文件名calculator.h(如图8所示),然后完成文件的添加。图7图85) 添加文件calculator.cpp和main.cpp与添加文件calculator.h的过程类似,只是在选择文件类型时选择为C+ Source File。完成后可以查看Calculator.pro文件的内容,整个工程的文件结构如图9所示。图93. 计算器程序源代码的分析说明1) 对calculator.h源代码的简要说明#ifndef CALCULATOR_H

5、#define CALCULATOR_H /对calculator.h头文件的声明#include/包含主窗体类#include/包含按键类#include/包含垂直布局器类#include/包含水平布局器类#include/包含显示框类class Calculator : publicQWidget/计算器继承自主窗体类 Q_OBJECT /必须加上这句,如果要调用信号,槽函数的操作的话public: Calculator(); /计算器类的构造函数 Calculator(); /计算器类的析构函数public slots: /定义各个按键按下后对应操作处理的槽函数voidzeroButto

6、nPress();voidoneButtonPress();voidtwoButtonPress();voidthreeButtonPress();voidfourButtonPress();voidfiveButtonPress();voidsixButtonPress();voidsevenButtonPress();voideightButtonPress();voidnineButtonPress();voidaddButtonPress();voidsubButtonPress();voidmulButtonPress();voiddivButtonPress();voidclear

7、ButtonPress();voidequButtonPress();private:QLineEdit *operateEdit;/声明显示框QPushButton *zeroButton;/声明数字按键QPushButton *oneButton;QPushButton *twoButton;QPushButton *threeButton;QPushButton *fourButton;QPushButton *fiveButton;QPushButton *sixButton;QPushButton *sevenButton;QPushButton *eightButton;QPush

8、Button *nineButton;QPushButton *clearButton;/声明运算符按键QPushButton *addButton;QPushButton *subButton;QPushButton *divButton;QPushButton *mulButton;QPushButton *equButton;QHBoxLayout *firstLayout;/声明水平布局器,该布局器主要对16个按键进行布局QHBoxLayout *secondLayout;QHBoxLayout *thirdLayout;QHBoxLayout *fourthLayout;QVBoxL

9、ayout *mainLayout;/声明垂直布局器,该布局器主要对主窗体上面的空间进行排布QString input1;/计算器第一个运算操作数QString input2;/计算器第二个运算操作数char operate;/运算符;#endif/ CALCULATOR_H2) 对calculator.cpp源代码的简要说明首先是构造函数的实现:Calculator:Calculator()operateEdit = newQLineEdit(this);/初始化显示框operateEdit-setReadOnly(true); /设置显示框为只读operateEdit-setText(tr

10、(0);/初始化显示框显示数据为0zeroButton = newQPushButton;/初始化按键zeroButton-setText(tr(0);/设置按键上显示的标签,以下对按键相关的操作类似oneButton = newQPushButton;oneButton-setText(tr(1);twoButton = newQPushButton;twoButton-setText(tr(2);threeButton = newQPushButton;threeButton-setText(tr(3);fourButton = newQPushButton;fourButton-setT

11、ext(tr(4);fiveButton = newQPushButton;fiveButton-setText(tr(5);sixButton = newQPushButton;sixButton-setText(tr(6);sevenButton = newQPushButton;sevenButton-setText(tr(7);eightButton = newQPushButton;eightButton-setText(tr(8);nineButton = newQPushButton;nineButton-setText(tr(9);clearButton = newQPushB

12、utton;clearButton-setText(tr(Clear);addButton = newQPushButton;addButton-setText(tr(+);subButton = newQPushButton;subButton-setText(tr(-);mulButton = newQPushButton;mulButton-setText(tr(*);divButton = newQPushButton;divButton-setText(tr(/);equButton = newQPushButton;equButton-setText(tr(=);firstLayo

13、ut = newQHBoxLayout;/初始化水平布局器firstLayoutfirstLayout-addWidget(zeroButton); /把按键zeroButton添加到firstLayoutfirstLayout-addWidget(oneButton); /把按键oneButton添加到firstLayoutfirstLayout-addWidget(twoButton); /把按键twoButton添加到firstLayoutfirstLayout-addWidget(addButton); /把按键threeButton添加到firstLayout,以下对水平布局器的操作

14、类似secondLayout = newQHBoxLayout;secondLayout-addWidget(threeButton);secondLayout-addWidget(fourButton);secondLayout-addWidget(fiveButton);secondLayout-addWidget(subButton);thirdLayout = newQHBoxLayout;thirdLayout-addWidget(sixButton);thirdLayout-addWidget(sevenButton);thirdLayout-addWidget(eightButt

15、on);thirdLayout-addWidget(mulButton);fourthLayout = newQHBoxLayout;fourthLayout-addWidget(nineButton);fourthLayout-addWidget(clearButton);fourthLayout-addWidget(equButton);fourthLayout-addWidget(divButton);mainLayout = newQVBoxLayout(this);/初始化垂直布局器mainLayoutmainLayout-addWidget(operateEdit); /把显示数据

16、框operateEdit加到mainLayoutmainLayout-addLayout(firstLayout); /把水平布局器firstLayout添加到mainLayoutmainLayout-addLayout(secondLayout); /把水平布局器secondLayout添加到mainLayoutmainLayout-addLayout(thirdLayout); /把水平布局器thirdLayout添加到mainLayoutmainLayout-addLayout(fourthLayout); /把水平布局器fourthLayout添加到mainLayoutconnect(

17、zeroButton,SIGNAL(clicked(),this,SLOT(zeroButtonPress();/把按键zeroButton的按下事件同zeroButtonPress()绑定到一起,以下操作类似connect(oneButton,SIGNAL(clicked(),this,SLOT(oneButtonPress();connect(twoButton,SIGNAL(clicked(),this,SLOT(twoButtonPress();connect(threeButton,SIGNAL(clicked(),this,SLOT(threeButtonPress();conne

18、ct(fourButton,SIGNAL(clicked(),this,SLOT(fourButtonPress();connect(fiveButton,SIGNAL(clicked(),this,SLOT(fiveButtonPress();connect(sixButton,SIGNAL(clicked(),this,SLOT(sixButtonPress();connect(sevenButton,SIGNAL(clicked(),this,SLOT(sevenButtonPress();connect(eightButton,SIGNAL(clicked(),this,SLOT(ei

19、ghtButtonPress();connect(nineButton,SIGNAL(clicked(),this,SLOT(nineButtonPress();connect(addButton,SIGNAL(clicked(),this,SLOT(addButtonPress();connect(subButton,SIGNAL(clicked(),this,SLOT(subButtonPress();connect(mulButton,SIGNAL(clicked(),this,SLOT(mulButtonPress();connect(divButton,SIGNAL(clicked(

20、),this,SLOT(divButtonPress();connect(equButton,SIGNAL(clicked(),this,SLOT(equButtonPress();connect(clearButton,SIGNAL(clicked(),this,SLOT(clearButtonPress();this-setWindowTitle(tr(Calculator);/设置窗体标题为Calculator input2= 0;/初始化运算操作数2为0 input1 = 0;/初始化运算操作数1为0 operate = 0;/初始化运算符为0然后是析构函数的实现:Calculator

21、:Calculator()/析构函数主要完成对构造函数中所声明的QLineEdit、QPushButton、QHBoxLayout、QVBoxLayout类的对象的回收工作(可以不定义析构函数,程序运行结束时会自动调用系统默认的析构函数)if (operateEdit != NULL) / operateEdit = NULL;deleteoperateEdit; if (zeroButton != NULL) zeroButton = NULL;deletezeroButton;.根据前面对按键事件的分析,有数字输入键,运算操作符输入键和清屏键三种,故对每种事件的槽响应函数都只说明一种,其他

22、依此类推。数字输入键响应槽函数,以按键“1”为例:void Calculator:oneButtonPress()if(input2=0)/如果当前显示框为0 input2=1;/变0为1 else/如果当前显示框不为0 input2= operateEdit-text(); input2.append(tr(1);/在显示的数据后面追加1 operateEdit-setText(input2);/更新显示框中的显示信息运算操作符输入键响应槽函数,以按键“+”为例:void Calculator:addButtonPress()floatfirst,second; input2= operat

23、eEdit-text();/把当前显示的数据保存到运算操作数2中if(operate = 0)/如果是第一次按下运算符键 input1 = input2;/把运算操作数2中的数据保存到运算操作数1中 input2= 0;/清除运算操作数2中的数据 operate = +;/把运算符键置+ Else/如果是第二次按下运算符键 second=input2.toFloat();/把运算操作数2中的数据转化为浮点类型 first=input1.toFloat();/把运算操作数1中的数据转化为浮点类型switch(operate)/根据当前的运算符判断做何操作 case+:first = first+

24、second;break;case-:first = first-second;break;case*:first = first*second;break;case/:first = first/second;break; input1 = QString:number(first,f,10);/把运算的结果转化成为可以在显示框显示的类型 input2 = 0;/清除运算操作数2中的数据 operate = +;/把运算符键置“+” operateEdit-setText(input1);/更新显示框中的显示内容清屏操作响应函数:void Calculator:clearButtonPres

25、s() input2=0;/把运算操作数2清零 input1=0;/把运算操作数1清零operateEdit-setText(input2); /更新显示框中的显示内容3) 对main.cpp源代码的简要说明#include /包含应用程序类#include calculator.h/包含计算器类int main(intargc, char *argv)/main函数的标准写法QApplication app(argc, argv); /创建一个QApplication对象,管理应用程序的资源 Calculator mainwindow; /产生一个计算器对象mainwindow.showMa

26、ximized();/显示计算器窗体(默认以最大化的形式显示) return app.exec();/让程序进入消息循环,等待可能的菜单、工具条、鼠标等的输入,进行响应。4. 计算器程序在X86上的编译运行1) 完成源程序的编辑后,可以直接点击图10中所示的运行按钮,这时QtCreator会自动编译源程序并生成可执行程序(这里默认的编译环境是X86的,生成的可执行程序可以直接在宿主机上运行)。可以在/root/Work/Calculator-build-desktop目录下找到可执行程序。图102) 2)计算器程序在X86上的界面如图11所示,可以进行简单的计算来测试此计算器的功能。图115.

27、 计算器程序的移植上面所说的可执行程序是由QtCreator调用用X86上的qmake命令生成Makefile文件后调用make命令自动生成。下面将通过交叉编译工具链中的qmake命令生成Makefile文件并用make命令生成ARM上的可执行程序。1) 进入/root/Work/Calculator目录下,可以看到计算器程序的几个源文件,如图12所示。图122) 用qmake命令生成Makefile文件,然后用make编译源程序(如图13所示),生成可执行程序(如图14所示)。由于交叉编译工具链的路径已经添加到环境变量PATH中了,所以这里用到的qmake是ARM上的命令(可以通过ls /opt/buildroot-2011.02/output/host/usr/bin找到qmake文件)。图13图143) 进入目标机,在目标机的/root目录下用scp命令拷贝上一步生成的可执行文件。然后运行计算器程序(如图15所示)。图154) 程序在目标机显示屏中的运行结果如图16所示。由于本程序没有集成键盘动作,只能通过鼠标点击按钮来进行操作。可以用目标机显示屏的触屏笔或者连接一个USB口的鼠标进行程序测试。图16专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁