免费预览已结束,剩余10页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
QT编写简单的计算器一、实验目的1) 熟悉QTCreator的简单操作。2)熟悉用QTCreator 编写GUI应用程序。3)了解QT程序编写框架。4)了解信号和槽机制,熟练掌握信号与槽在应用程序中的使用。二、实验内容1)学习简单的QT类的使用,如QLineEdit、QPushButton等。2)用QtCreator创建工程,用QT编写计算器程序三、实验分析 计算器主要实现两个功能,一是表达式输入,二是数据计算。表达式输入是逐个字符输入的,实现该功能只需用QLineEdit自带的成员函数setText()实现。而计算功能必须自己设计,以表达式 12 + 24 为例,我们建立两个堆栈 num 和 sym 分别用来存储数值和运算符,在num 堆栈中存储着12、24,在sym堆栈中存储着 + 。计算时只要将它们从堆栈中弹出,传递给一个函数即可实现相关运算表达式的计算。实验中实现如下:int calculator:result(char c ,int a , int b) switch(c) case +: return a+b; case -: return a-b; case *: return a*b; case /: return a/b; 根据以上分析绘制程序大概流程图如下:开始读入表达式是 =?调用calculate函数将结果显示NY 图1 程序流程图四、实验步骤1.创建工程1)打开QtCreator,如图2所示。图2 Qt Creator 打开界面2) 选择“文件-新建文件或工程”,然后在弹出的对话框中选择“控件项目”(如图3所示),然后进入下一步。图3 新建工程项目3) 定义新工程的工程名并选择保存路径(如图4所示),然后进入下一步。图4 设置保存路径4) 目标设置,选择默认的“桌面”即可(如图5所示),然后进入下一步。 图5 目标设置5) 设置类属性。类名:calculator 基类:QWidget 其它选默认即可。图6 类属性设置计算器程序的实现2.计算器程序实现计算器程序主要分以下两部分工作:一是实现计算器的图形界面;二是实现按键事件和该事件对应的功能绑定,即信号和对应处理槽函数的绑定。1)计算器图形界面的实现在QT Creator 中要实现图形界面很简单,只要从基类QWidget继承即可。首先创建一QMainWindow(parent).ui,这个界面为QWidget,然后在左侧的Widget Box找相应的控件添加到QMainWindow(parent).ui里。首先提出一个lineEdit控件作为算式显示窗口和结果显示窗口,在提取出18个QpushButton为0到9按键和加减乘除按键、小数点按键、等于按键、清屏按键和退格按键。然后再把各个QpushButton名字改成相应的符号,并且改对应pushbutton的属性,保存后取Qt creator编译QMainWindow(parent).ui,运行程序就可以显示相应界面。各控件属性及具体界面设计效果分别如图7、8所示:图7 各控件属性设置 图8 界面设计效果2)信号和对应槽函数的绑定分析计算器的按键我们可以把按键事件分为以下四类,一是简单的数字按键,主要进行数字的录入,这类按键包括按键09;二是运算操作键,用于输入数学运算符号,进行数学运算和结果的显示,这类按键包括“+”,“-”,“*”,“/”,“=”;三是清屏操作键,用于显示框显示信息的清除;四是退格操作键,用于更正错误输入。具体功能的实现采用信号和槽连接机制。首先在.h文件中对各个按键进行声明,如private slots: void Button_0_clicked();就是对“0”按键进行声明,再到.cpp文件中编写相应的代码实现其功能。如:void calculator:Button_0_clicked() ui-showEdit-setText(ui-showEdit-text()+QString:QString(0);就是按键“0”对应的槽函数。 然后,对信号和槽函数进行连接。如:connect(ui-Button_0,SIGNAL(clicked(),this,SLOT(Button_0_clicked();五、实验总结通过本次实验熟悉了使用QT Creator软件进行GUI应用程序开发的基本流程及程序架构。对基本控件QLineEdit、QPushButton等的属性有了比较全面的了解。基本达到了实验所要求的目的。但是实验过程中也暴露了自己编程方面的不足,有待进一步提高。六、感谢感谢朱老师为我们提供了良好的实验环境和内容,感谢张彤学长耐心的指导和帮助。是你们让我有机会领略QT软件的强大功能,特别是在GUI开发方面的魅力,今后我将继续沿着这条开发道路走下去。七、附录计算器程序源代码的简单说明1)头文件calculator.h 源代码:#ifndef CALCULATOR_H#define CALCULATOR_H#include namespace Ui class calculator;class calculator : public QWidget/calculator 类公有继承于基类QWidget Q_OBJECTpublic: explicit calculator(QWidget *parent = 0);/构造函数声明 calculator();/析构函数声明private slots:/槽函数声明 void Button_0_clicked(); void Button_1_clicked(); void Button_2_clicked(); void Button_3_clicked(); void Button_4_clicked(); void Button_5_clicked(); void Button_6_clicked(); void Button_7_clicked(); void Button_8_clicked(); void Button_9_clicked(); void Button_pointer_clicked(); void Button_mul_clicked(); void Button_div_clicked(); void Button_minus_clicked(); void Button_add_clicked(); void Button_equ_clicked(); void Button_del_clicked(); void Button_ac_clicked();private: Ui:calculator *ui; int calculate(); int result(char c,int a,int b);#endif / CALCULATOR_H2)堆栈文件 stack.h 源代码: #ifndef STACK_H#define STACK_H#include template /类模板的函数体要放在一个文件内class stackpublic: stack() top=0; for(int i=0;i100;i+) bufferi=0; void push(T c) if (top0) return buffer-top; else qDebug(EMPTY STACK); T buffer100; int top;#endif / STACK_H3)类方法实现 calculator.cpp 源代码: #include calculator.h#include ui_calculator.h#include#include stack.hcalculator:calculator(QWidget *parent) : QWidget(parent), ui(new Ui:calculator)ui-setupUi(this);/用connect对信号和槽函数进行连接 connect(ui-Button_0,SIGNAL(clicked(),this,SLOT(Button_0_clicked(); connect(ui-Button_1,SIGNAL(clicked(),this,SLOT(Button_1_clicked(); connect(ui-Button_2,SIGNAL(clicked(),this,SLOT(Button_2_clicked(); connect(ui-Button_3,SIGNAL(clicked(),this,SLOT(Button_3_clicked(); connect(ui-Button_4,SIGNAL(clicked(),this,SLOT(Button_4_clicked(); connect(ui-Button_5,SIGNAL(clicked(),this,SLOT(Button_5_clicked(); connect(ui-Button_6,SIGNAL(clicked(),this,SLOT(Button_6_clicked(); connect(ui-Button_7,SIGNAL(clicked(),this,SLOT(Button_7_clicked(); connect(ui-Button_8,SIGNAL(clicked(),this,SLOT(Button_8_clicked(); connect(ui-Button_9,SIGNAL(clicked(),this,SLOT(Button_9_clicked(); connect(ui-Button_ac,SIGNAL(clicked(),this,SLOT(Button_ac_clicked(); connect(ui-Button_add,SIGNAL(clicked(),this,SLOT(Button_add_clicked(); connect(ui-Button_del,SIGNAL(clicked(),this,SLOT(Button_del_clicked(); connect(ui-Button_div,SIGNAL(clicked(),this,SLOT(Button_div_clicked(); connect(ui-Button_mul,SIGNAL(clicked(),this,SLOT(Button_mul_clicked(); connect(ui-Button_minus,SIGNAL(clicked(),this,SLOT(Button_minus_clicked(); connect(ui-Button_equ,SIGNAL(clicked(),this,SLOT(Button_equ_clicked();calculator:calculator()/析构函数实现 delete ui;/各按键功能实现槽函数void calculator:Button_0_clicked() ui-showEdit-setText(ui-showEdit-text()+QString:QString(0);void calculator:Button_1_clicked() ui-showEdit-setText(ui-showEdit-text()+QString:QString(1);void calculator:Button_2_clicked() ui-showEdit-setText(ui-showEdit-text()+QString:QString(2);void calculator:Button_3_clicked() ui-showEdit-setText(ui-showEdit-text()+QString:QString(3);void calculator:Button_4_clicked() ui-showEdit-setText(ui-showEdit-text()+QString:QString(4);void calculator:Button_5_clicked() ui-showEdit-setText(ui-showEdit-text()+QString:QString(5);void calculator:Button_6_clicked() ui-showEdit-setText(ui-showEdit-text()+QString:QString(6);void calculator:Button_7_clicked() ui-showEdit-setText(ui-showEdit-text()+QString:QString(7);void calculator:Button_8_clicked() ui-showEdit-setText(ui-showEdit-text()+QString:QString(8);void calculator:Button_9_clicked() ui-showEdit-setText(ui-showEdit-text()+QString:QString(9);void calculator:Button_pointer_clicked() ui-showEdit-setText(ui-showEdit-text()+QString:QString(.);void calculator:Button_mul_clicked() ui-showEdit-setText(ui-showEdit-text()+QString:QString(*);void calculator:Button_div_clicked() ui-showEdit-setText(ui-showEdit-text()+QString:QString(/);void calculator:Button_minus_clicked() ui-showEdit-setText(ui-showEdit-text()+QString:QString(-);void calculator:Button_add_clicked() ui-showEdit-setText(ui-showEdit-text()+QString:QString(+);void calculator:Button_equ_clicked() ui-showEdit-setText(ui-showEdit-text()+QString:QString(=); int ans = calculate(); ui-showEdit-setText(ui-showEdit-text()+QString:number(ans);void calculator:Button_del_clicked() ui-showEdit-backspace();void calculator:Button_ac_clicked() ui-showEdit-clear();int calculator:calculate() QByteArray content=ui-showEdit-text().toLatin1(); char *con=content.data();/QString-char*的方法 stack sym; stack num; char tempnum100; int label=0; int count=content.size(); for(int i=0;i=0&coni=9) tempnumlabel+=coni; else if(coni!=) int realnum=0; for(int j=0;jint num.push(realnum); realnum
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 未来五年菊苣企业县域市场拓展与下沉战略分析研究报告
- 未来五年除涝设施管理服务企业ESG实践与创新战略分析研究报告
- 未来五年复合材料真空导入成套装备企业ESG实践与创新战略分析研究报告
- 未来五年580锭及以上环锭棉细纱机企业ESG实践与创新战略分析研究报告
- 未来五年防御素饲料企业数字化转型与智慧升级战略分析研究报告
- 未来五年生产性保洁服务企业ESG实践与创新战略分析研究报告
- 服装生产管理培训课件
- 2025-2030全球智能导盲设备行业市场动态分析发展趋势研究报告
- 2025-2030全球宽带网络行业市场深入挖掘及发展动态前景预测报告
- 2025-2030全球化妆品行业市场竞争格局分析市场供需与投资机会研究
- 幼儿园食堂试卷(含答案)
- 仓储物流岗位安全操作规程
- 《房屋市政工程第三方安全巡查服务标准》
- 2024年广东省第一次普通高中学业水平合格性考试历史试卷(解析版)
- 儿童肥胖的长期管理
- 2025早发性卵巢功能不全中西医结合诊疗指南
- 国开2025年《行政领导学》形考作业1-4答案
- 2025年G3锅炉水处理实操考试题库含答案
- 铁路专业基础知识考试题及答案
- 精神科护理文书书写规范
- 美术包过本科线协议书3篇
评论
0/150
提交评论