Qt实现计算器(包含算术运算和逻辑运算),纯⼲货,⼀步步
超详细过程
⼀、实验⽬的和要求
⽬的:锻炼我们对Qt的掌握和应⽤,锻炼实际解决问题,完成项⽬的能⼒。
要求:在课后作业03,05的基础上,增加图形交互功能,增加三个逻辑运算符&&,||,!,并能处理逻辑运算符和算术运算符的混合运算;增加容错功能,能进⾏异常处理。
⼆、实验环境
软件:Qt 5
硬件: Legion
三、实验内容
设计并实现计算器
text函数什么意思四、实验过程
⽤⽂字、图(流程图等)、表格等⽅式记录实验过程中分析、设计⼯作。
4.1 任务定义和问题分析
此次需求在于基于课后作业扩充。主要难点在于图形交互界⾯的建⽴,需要学习QT,并且将原本的代码转化为Qt可以识别的代码。并且在算术运算的基础上增加逻辑运算,并⽀持混合运算。
4.2 数据结构的选择和概要设计
在对Qt⼀段时间的学习之后,我选择使⽤ui来进⾏图形界⾯的设计简化过程。在设计好计算器的⼤概视图后,需要更改每个按钮的名称以便于后期的实现。
之后在代码的编写上,为了增加美观性与实⽤性,我选择添加背景图⽚和显⽰实时时间。之后需要通过connect语句将按钮信号和对应的槽函数相连接,以便于可以通过按按钮来进⾏处理(这⼀步⾮常重要)。
之后对槽函数的设计上,选择每输⼊⼀个,就在textEdit上显⽰⼀个,并且将它储存到事先准备好的string⾥去。在进⾏计算的时候,代码类似于第三、五次作业内容,故不再赘述。需要注意的是,在按下等于号时,需要将计算的结果显⽰到textEdit上。
4.3 详细设计
本⼈最开始设计的是ui,建⽴的按钮效果如下
现在我逐⼀讲解过程:
1、pushButton和textEdit的建⽴
创建完项⽬之后,⾸先看到的肯定是
(Resource和Other files是后加的,刚创建并没有,后⾯会讲到)
那么点开forms,就可以进⼊ui界⾯。之后拖拽左框的pushbutton按钮和textEdit按钮,然后⾃⾏排版(pushbutton是后期⾃⼰按按钮⽤的,textEdit是显⽰⽤的,就留⼀个textEdit)
这⾥提⼀句,在排版时,除了可以⾃⾏调节按钮位置外,更可以选中你所需要排列的按钮,通过上⽅的
这两个按钮进⾏⽔平或者垂直布局。
此时你将会获得⼀个已经排版好的计算器样式,双击pushbutton按钮可以更改名称,可以将pushbutton改为‘(’、‘=’等任意符号,⽅便之后计算器运⾏。
2、对pushbutton和textEdit的修改
在⼤概的界⾯设计结束后,接下来的步骤是对pushbutton和textEdit属性的修改。点开ui界⾯,任意点击⼀个按钮,会在右下⾓看到这样的界⾯
其中,objectName就是指按钮信号的名称,因为在后期需要设置相应的槽函数和信号连接,所以信号必须有⼀个容易区分的名字(默认都是pushbutton_i。i=1,2…n)。例如,可以点击‘+’,将它的名字改为pushButton_plus或者pushButton_jia,怎么改都⾏,只要⾃⼰可以理解。此外,顺便提⼀句,因为pushbutton都是有默认⼤⼩的,如果不满意,可以在geometry的宽度⾼度进⾏修改。
既然改了,就改到底!我在设计时嫌默认按钮太⼩,就将按钮放⼤,但是放⼤后却感到字体好⼩啊…所以,就要将字体调⼤,那⼲脆字体格式也改了吧。咋改呢?回到myWidget.cpp⽂件中(我构造的类名称叫myWidget),在这个
Ui->setupUi(this)下⾯接着写这样⼏句话。
ui->pushButton_0->setFont(QFont("宋体", 18));
//此处,pushbutton_0是我定义按钮0的名称,那么我设置的就是宋体18号的⼤⼩
//但是为什么同样的代码,你写会报错呢?
//包含Qfont头⽂件了嘛…没有就去包含吧,就不会报错了。
//同理
QFont textEditFont ( "Microsoft YaHei", 25, 75);
ui->textEdit->setFont(textEditFont);
这两⾏代码,就把输⼊输出时显⽰在textEdit框⾥数字的⼤⼩和格式修改了。
3、myWidget.h的编写
点开myWidget.h⽂件,映⼊眼帘的是public、private slots、private⼏个单词,在private下还有
Ui::myWidget *ui;
⼀⾏代码对不对?
好的,接下来需要做的是,在public 中写⼏个函数
我写了这⼏个函数,is_num的作⽤是判断字符是不是数字,Cal的作⽤是进⾏局部运算(了解计算器机制的都清楚,储存在栈中,按优先级进⾏⼊栈或者局部运算操作),prior作⽤是判断运算符优先级,Do就是最核⼼的部分,将表达式字符串进⾏计算,return出结果。这些函数因⼈⽽异,每个⼈写的函数,写的⽅式都不同,但因为我写这篇博客在于我已经完成了前⼀次在vs中编写的过程,并且我此篇博客是⾯向的合肥⼯业⼤学同学们的⼤作业,所以对于这些函数的介绍,我只会在篇末给出⼤概思路。在后期修改中,我⼜加了⼀个
void on_actionRight_triggered();
⽤来将textEdit显⽰的数字进⾏右对齐(因为我看到计算器都是这样的,所以这⼀步很可以省略)
在private slots中,我们需要编写槽函数,来和按钮匹配
我定义了这么多槽函数,前⾯那么多个,可以看出分别匹配了我ui中的按钮。那么后⾯四个五个槽函数呢?分别是四个报错函数和⼀个显⽰时间的函数,可以根据需要添加。最后,在private中,我添加
了⼀个Qstring strin,即建⽴了⼀个Qstring类的对象叫strin。到这⾥,就结束了myWidget.h的编写。
4、myWidget.cpp的编写
这是⼀个⾮常浩⼤的⼯程。第⼀步,我想将窗⼝的名称改了,毕竟我要证明是我做的,可以使⽤setWindowTitle(“我的窗⼝”),你可以“”中写⼊任何东西,产⽣出的窗⼝就会显⽰这个名称

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。