pg电子模拟器股份有限公司-pg电子官方网站-底层指令集与微处理器重构

您现在所在位置: 主页 > 前沿洞察 > 技术白皮书

技术白皮书

Company information

行业动态

Industry dynamics

开发者FAQ

Common Problem

从零开始自制计算器

发布日期:2026-07-06 14:15 浏览次数:

  自带的计算器制作的简化版本,是用Qt做的,直接把整个表达式输入然后得出计算结果。

  输入标题,两个QPushButton表示最小化与关闭,同时加入两个Spacer,让标题与左边空出一些距离。其实就是模仿

从零开始自制计算器(图1)

  这里就不做最大化了。因为涉及到按钮的重新排布问题,这个可以自己选择实现。

  判断是否是左键,是的话获取mouse坐标,再设置窗口坐标。当触发第二个函数时,即先判断是否按住左键不放,使用

  获取坐标后减去原来光标的坐标得到窗口坐标的变化量,再用原坐标加上这个变化量。4.1.1.2 最小化与关闭这里以最小化为例,关闭也一样的,改一下函数调用即可。

  呃....这里可能是截图工具的问题,看不出来有多大的效果,但是直接在机器上看是有比较大的区别的,建议还是加上阴影。

从零开始自制计算器(图2)

从零开始自制计算器(图3)

  然后添加处理函数,这里实现了一个添加文本与清除焦点的函数,添加文本就是对应按键被光标单击后添加到输出框。单击后会把焦点保留在这个按钮上,键盘上敲空格默认会帮你按一次这个按钮,因此如果不清除焦点的话,在光标单击了某个按钮,比如7,按空格就会在输出框上输出7,光标单击了8后,按空格就会在输出框上输出8。

  前调用fadeOut()函数,因为动画会在另一个线程启动,所以需要在主线程休眠指定秒数,等待淡出效果完成后,主线)。

从零开始自制计算器(图4)

  void MainWindow::fadeOut(void) { QPropertyAnimation * changeOpacity = new QPropertyAnimation(this,windowOpacity); changeOpacity-setStartValue(0.9); changeOpacity-setEndValue(0); changeOpacity-setDuration(2500); changeOpacity-start(); QTime start = QTime::currentTime().addMSecs(2500); while(QTime::currentTime() start) QCoreApplication::processEvents(QEventLoop::AllEvents, 100); }

从零开始自制计算器(图5)

  -与+,因为有(-7) (+234)这种情况。然后把这个符号保存下来判断后面是否是对应的右括号。

  private封装了一些简单的对两个栈进行操作的工具方法,公有的pop()与get()是对运算符栈进行的操作.因为外部不需要对操作数栈进行操作,由calculate()进行操作,公有的push重载了,可以push到操作数栈或运算符栈.

从零开始自制计算器(图6)

  6.6/{2.3+34.3*2.22-5%2+22%4*[2+3.4/5-(4.3+3.2*33.3)]+34.3} + 7.8*{2.4-6/6+0-0*[23.4-3.4/6+4*(2.2+3)]}+0 - 0 + 0.0 = 10.8569 3.4 - (+3.34) + 34.3 * (-2) / 3.34 + {[(-3.4)^2/3.4+3.4/3]-3.32+[3*(-3)]} = -28.2656 9^5-34.4^2.3+5%6-34+66%78-78%4 + (-3)*3.4 / {3*(-7)+[3*(-8)+3*(3.4+4.34)/9.3-3.2 + 0.0 - 0]+0.0 - 0}+3.4^4/6.888 = 55683.2

从零开始自制计算器(图7)

从零开始自制计算器(图8)

  使用execute执行,表达式先去除所有的空格,然后作为命令行参数传递给计算程序,然后计算程序把计算结果写入到

从零开始自制计算器(图9)

  对于结果因为在计算程序中设置了fixed格式,因此对于1+2也会返回3.000000

从零开始自制计算器(图10)

从零开始自制计算器(图11)

  fixed格式,否则的话显示的是pg电子科学计数法,对小数位数有要求的话可以设置setprecision

  7.2.3 错误提示这里出现错误时,输出#,然后主程序读取到就会提示表达式错误,请重新输入。。

  可以考虑把错误处理整合过来,比如输入了一个点,不能继续输入点,输入了一个乘号或者除号不能再继续输入另一个符号:

  的exe,第二个选择打包之后的文件夹,然后选择添加文件,选择递归添加,添加上一步生成的所有文件(夹)。

0335-3630388