用Qt写计算器

来源:互联网 发布:c语言标准库pdf 编辑:程序博客网 时间:2024/05/24 07:14

先转一篇关于singal和slot的介绍:

http://www.ibm.com/developerworks/cn/linux/guitoolkit/qt/signal-slot/index.html


注意: 在类声明的开始位置必须加上 Q_OBJECT 语句,它将告诉编译器在编译之前必须先应用 moc 工具进行扩展,从而才能够使用singal和slot机制。


计算器的控制逻辑:

设置一个标志位:waitingForOperand,表示是否在等待输入操作数,作用仅是判断在输入数字时,是否需要清屏,不对控制逻辑造成影响。

四个存储单元:pendingAdditiveOperator存储等待运算的加减运算符;pendingMultiplicativeOperator存储等待运算的乘除运算符;

sumSoFar存储经加减运算后或者等待加减运算的数值,factorSoFar存储经乘除运算后或者等待乘除运算的数值。


逻辑的主要部分在于乘除运算和加减的优先级不同。下面的各个函数都是针对输入的不同符号做不同的处理:

1. 处理加减运算符:如果pendingMultiplicativeOperator不为空,即存储有待运算的乘除运算符,就先将factorSoFar的数值与当前显示的数字进行乘除运算;然后pendingMultiplicativeOperator不为空,即存储有待运算的加减运算符,则计算sumSoFar与当前的数字的加或者减。

2.  处理乘除运算符:如果pendingMultiplicativeOperator不为空,即存储有待运算的乘除运算符,就先将factorSoFar的数值与当前显示的数字进行乘除运算;


这两个函数都是不处理当前输入的符号,而是处理先前输入的符号。如果当前输入是乘除,则看前一个符号是否是乘除,是则处理;如果当前输入是加减,则先往前看前一个是否是乘除,有则处理,然后再看前一个是否是加减,有则处理。

算式最多只会储存一个加减、一个乘除运算符,因为在输入下一个二元运算符时,乘除运算符就会被处理,所以最多只会储存一次,加减运算符同理。


3. 处理一元运算符:直接对屏幕上显示的数字进行一元运算就行了。

4. 处理等号:跟加减运算符同样处理。


其他的诸如换号、小数点、回退都很容易处理,就不赘述了。

原创粉丝点击