查看完整版本: [-- 最牛计算器(含全部源代码) --]

QTCN开发网 -> Qt 作品展 -> 最牛计算器(含全部源代码) [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

<<   1   2   3   4  >>  Pages: ( 4 total )

zswx0226 2012-12-20 12:38

最牛计算器(含全部源代码)

     看到论坛上这么多大牛公开了源代码,本人也为了弘扬这种精神,将自己辛苦写了4个月的计算器的源代码第一次在这里全部公开
      这个计算器用到的QT中的知识并不高深,非常适合初学者学习界面编程,对于高手也可以学习下里面的算法,主要用到的算法有:后缀式表达式求值、部分选主元高斯消去法求阶梯矩阵,(非)线性方程组等、分段求大整数开方、初等相似变换及QR方法计算全部特征值、反幂法求最大特征值、遗传算法求复系数多项式所有根等。其中很多算法是本人在原有算法之上做了优化(比如求大整数开方、求线性方程组的根,遗传算法求多项式所有根)。
     希望诸位多提些改进的意见,可以是界面效果,也可以是算法效率方面的,为促进大家的交流而顶起!
软件下载在另一贴子中http://www.qtcn.org/bbs/read-htm-tid-51829.html
下面的代码本人在QT Creator 4.8.1上测试过,在Xp和win7都可以运行。
源代码[attachment=9351](说明本软件只供学习使用,禁止以商业目的出售,将追究法律责任,请最终劳动者的成果!)

下附上运行的图片
计算器的主界面:包含20几个函数,可以进行不同进制之间转换,复数的复杂计算,函数的嵌套,分数形式显示,选择有效数字,角度制和弧度制,还有13个物理数学中的常数、三个变量课选择
[attachment=9350]



大整数工具:可以计算到4万多位的大整数
[attachment=9346]


线性代数工具:可以同时使用3个100*100阶的矩阵,进行20中操作运算
[attachment=9347]



多项式求根工具:可以计算20阶以内的复系数的多项式所有复数(包括实数)根
[attachment=9348]



历史输入管理器:在这里保留了所有正确计算的结果
[attachment=9349]




sacredmo 2012-12-20 13:20

xbb8765 2012-12-20 13:22

xbb8765 2012-12-20 13:23
   ,刚发错了

cfxks1989 2012-12-20 14:18
    

passion_wu 2012-12-20 14:19
赞一个,不错

realfan 2012-12-20 15:09
超赞!!

dabears 2012-12-20 15:52
太强了 !!超赞!!

emilyrd 2012-12-20 17:45

anders0913 2012-12-20 22:00
确实不错,支持楼主

寒意 2012-12-20 22:29
  给力  

沙漠之源 2012-12-20 22:37
        

bbstz 2012-12-21 09:39
这个真心强大,支持一下

fishchen 2012-12-22 12:35
   呵呵,很好的东西

zswx0226 2012-12-22 12:44
感谢各位的力鼎啊!!!     

mewjerry 2012-12-22 15:35
看起来相当不错的样子,顶一个

xsjqqq123 2012-12-23 13:17
被雷到了,我做的和你不是一个级别的啊……

baiwfg2 2012-12-24 12:57
。牛哥,赞一个。。

jnny_cn 2012-12-25 21:42
。牛哥,赞一个。。

aisq2008 2012-12-26 08:48
真心顶一个,呵呵

yanzh 2012-12-26 14:42
向您学习!!!!

zhanglyl 2012-12-29 08:53
很好的素材!

transformer 2012-12-29 10:06

guoyuanqiang 2012-12-29 15:26
    

atomspace 2012-12-30 22:20
初学QT,看了你的程序,学到了很多东西, 非常感谢
有一个问题想请教:calculator类中有大量的slot函数,与计算器按钮一一对应,查看了代码,这些对应关系不是在代码中通过connect手动实现的,而是calculator.ui本身描述了这种对应关系。请问,calculator.ui中的这些对应关系是手动加进去的吗?还是通过某种方式自动生成的?请多多指教!

另:程序中每次打开子窗口,如大整数工具、线性代数工具、多项式求根工具等,代码中时先new  一个新窗口,再通过show显示出来,请问这些窗口关闭后是否销毁?多次打开是不是会占用较多的内存?

zswx0226 2012-12-31 09:40
问题一:是通过QT中带有的Qt designer来设计界面的时候添加的信息和槽,这些添加完之后,利用Qt creator 来编译的时候就会自动生成一个ui_*****.h的头文件,在这头文件中会把这些信息和槽添加进去的。然后你就利用这个头文件可以实现自己的功能了。其实Qt的信息和槽有在界面设计的时候有三种实现形式,一是自己写,而是上面的那一种,还有一种半自动,用0n_QButton_clicked()这种形式。具体你可以百度。
问题二:这些窗口关闭后没有被销毁,因为在Qt中当子窗口被关闭后(即调用close()),只会把窗口隐藏起来,只有当父窗口被销毁时,才会把这些子窗口销毁掉。要是想子窗口在关闭时被销毁掉,减少资源占用,你可以在代码的closeEvent()这个槽函数中的event->accept();这行代码下添加一句
delete this;  就可以把本窗口给销毁掉。(但是我试了一下不能够全部释放资源,大概可以释放80%左右的资源,不知道是为什么)
感谢你提出第二个问题,之前我都没注意到过这个问题。

atomspace 2012-12-31 22:01
感谢楼主这么详细的回答,长见识了。

crazybun 2013-01-01 19:51
真的很牛逼啊 给我吓尿了。。半年

zaq2010 2013-01-02 00:52
最好能说明下 开发环境。。
我在Qt5.0 和 Qt4.8.4  无论是在VS2010 还是QtCreator 都无法生成

千王之王 2013-01-03 16:01
niu

fyc05 2013-01-04 09:07

soulcxf 2013-01-04 17:00
这个好强的说 下载了 多谢楼主~

sowhatgod 2013-01-11 00:41
把它移植到手机上,这样一些工科学生就不必天天捧着计算器了。

kea_iv 2013-01-24 01:55
很强大的计算器!不过发现一个小毛病,每次操作完之后,在下一次操作时不会清除前一次操作.....导致的结果就是前一次输入与后一次输入一起执行了!

裸奔的流浪者 2013-01-29 11:56
牛人

ifelse 2013-02-23 00:51
不顶不行啊!牛

lcl_data 2013-02-25 13:25
谢谢分享!

lch922 2013-02-28 15:15
翻译可以优化一下。Qt是可以支持不关闭程序,而达到切换语言的。

lch922 2013-02-28 15:15
功能确实很强悍!

zswx0226 2013-03-02 18:34
实现了主界面上的语言动态切换,但是对于子窗口实现动态切换比较麻烦,涉及多文件的动态切换比较麻烦

zswx0226 2013-03-02 18:43
这个问题我已经注意到了,也尝试解决过,就是当操作完之后,将表达式全选中,然后当再次输入时判断是否被选中,若选中,则清楚原先内容。但是貌似在点击界面上的按钮时,hasSelectedText()函数并不能起作用。而当键盘上输入字符时,QLineEdit会自动清楚选中的文字。求解

prowayne 2013-03-02 18:54
很好, linux 下 的计算器真不好找, 这个稍微修改下就能编译通过,感谢作者
[attachment=9808]


lch922 2013-03-11 14:59
可以用Qt的信号槽机制。

lch922 2013-03-11 15:12
hasSelectedText()函数并不能起作用

是不是由于焦点切换引起的?
简单一点的处理方法,可以加入一个标志位,记录是不是上次已经计算过,并且是新的输入。

void Calculator::inputNumOne()
{express_lineEdit->insert(tr("1"));}
void Calculator::inputNumTwo()
{express_lineEdit->insert(tr("2"));}
void Calculator::inputNumThree()
{express_lineEdit->insert(tr("3"));}
void Calculator::inputNumFour()
{express_lineEdit->insert(tr("4"));}
void Calculator::inputNumFive()
{express_lineEdit->insert(tr("5"));}
void Calculator::inputNumSix()
{express_lineEdit->insert(tr("6"));}
void Calculator::inputNumSeven()
{express_lineEdit->insert(tr("7"));}
void Calculator::inputNumEight()
{express_lineEdit->insert(tr("8"));}
void Calculator::inputNumNine()
{express_lineEdit->insert(tr("9"));}
void Calculator::inputNumZero()
{express_lineEdit->insert(tr("0"));}

这些用QSignalMapper来完成可能会简洁一些。

fgl999 2013-03-11 15:59
LZ对数学上面的一些算法比较懂啊。

aqitata817 2013-03-14 11:54
附件在哪里啊

caixiangchen 2013-03-14 16:32
Qt的作品,主要来打酱油的,看看界面

305082800 2013-03-17 13:37
大神,膜拜!

hlh060611 2013-03-20 15:13
这功能强大的.....

圣域天子 2013-03-20 22:24
不得了,真了不得。


查看完整版本: [-- 最牛计算器(含全部源代码) --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled