Qt简易计算器代码_第1页
Qt简易计算器代码_第2页
Qt简易计算器代码_第3页
Qt简易计算器代码_第4页
Qt简易计算器代码_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、cwidget.cpp#include "cwidget.h"#define key_clr "clr"#define key_add "+"#define key_sub "-"#define key_mul "*"#define key_div "/"#define key_eq "="#define key_0 "0"#define key_1 "1"#define key_2 "2"#de

2、fine key_3 "3"#define key_4 "4"#define key_5 "5"#define key_6 "6"#define key_7 "7"#define key_8 "8"#define key_9 "9"#define buttonwidth 30 /定义按键的长度#define buttonheight 30 /定义按键的宽度static char *buttontext = /定义静态全局变量key_1,key_2,key_

3、3,key_4,key_5,key_6,key_7,key_8,key_9,key_add,key_sub,key_mul,key_div,key_eq,key_clr,key_0;cwidget:cwidget(qwidget *parent, char *name) /构造函数initialize();createform();cwidget:cwidget() /析构函数,销毁各个按键delete edit;delete *button;delete mainlayout;delete toplayout;delete bottomlayout;void cwidget:calculat

4、e() /响应按键“=”,调用计算功能switch(oper)case qt:key_plus: /加法firstnum += secondnum;break;case qt:key_minus: /减法firstnum -= secondnum;break;case qt:key_asterisk: /乘法firstnum *= secondnum;break;case qt:key_slash: /除法firstnum /= secondnum;break;default: firstnum = firstnum;edit->settext(qstring:number(firstn

5、um);void cwidget:setvalue()qstring tempstr;tempstr = edit->text(); /显示框中的数值赋给tempstrif(tempstr.length() < edit->maxlength() /小于显示框允许的最大位数tempstr += (qpushbutton *)sender()->text(); /将按键对应的数值添加tempstr elseqmessagebox:information( this, tr("calculator"),tr("too long!");

6、 /位数过多,报错if(-1=oper) /没有按加减乘除、等于、清空键 firstnum = tempstr.toint(); /把tempstr转换成整型数,赋给第一个计算数edit->settext(qstring:number(firstnum); /变成字符串之后,显示else /之前按过加减乘除、等于、清空键secondnum = tempstr.toint(); edit->settext(qstring:number(secondnum); void cwidget:setoper() /将按键转换成qt能识别的语言qstring str=(qpushbutton

7、*)sender()->text();if(str = "+")onclicked(qt:key_plus); / qt中使用的“+”键的名称else if(str = "-")onclicked(qt:key_minus); / qt中使用的“”键的名称。else if(str = "*")onclicked(qt:key_asterisk); / qt中使用的“*”键的名称。else if(str = "/")onclicked(qt:key_slash); / qt中使用的“/”键的名称。else if

8、(str = "=")onclicked(qt: key_equal); /点击等于号,调用计算函数void cwidget:clear()edit->clear(); /清空显示框,clear()为内部函数edit->settext(tr("%1").arg(0); /这个函数可获取文本编辑框中光标的位置,并显示在状态栏中 / settext(tr(“%1行 %2列”).arg(rownum).arg(colnum);initialize(); /调用初始化函数void cwidget:initialize()firstnum = 0;se

9、condnum = 0;oper = -1;void cwidget:createform()setminimumsize(80,200); /最小窗口setmaximumsize(80,200); /最大窗口 mainlayout = new qvboxlayout(this,20); /整体布局,以当前窗口为基准,(垂直间隔)离边界20 toplayout = new qhboxlayout(mainlayout,30); /水平布局,包含在mainlayout里,水平间隔30edit = new qlineedit(this,"edit"); /edit->se

10、talignment(qt:alignright); /数值从右边开始出来edit->setmaxlength(9); /最多9位数edit->settext(tr("%1").arg(0); /光标位置edit->setreadonly(true); /设为只读模式 toplayout->addwidget(edit); /先布置显示框 bottomlayout = new qgridlayout(mainlayout,4,4,10); /布置在mainlayout里,4行、4列、间隔10 int n; for(int r=0; r<3; r

11、+) /19阵列 for(int c=0; c<3; c+) n = c+3*r; buttonn = new qpushbutton(buttontextn,this,buttontextn); /构造一个名称为n、父对象为parent并且文本为n的推动按钮 buttonn->setfixedsize(buttonwidth,buttonheight); /设置按键大小 bottomlayout->addwidget(buttonn,r,c); /从右上角为第1(r+1)行,第1(c+1)列 connect(buttonn,signal(clicked(),this,slo

12、t(setvalue(); button9 = new qpushbutton(buttontext9,this,buttontext9); / “ + ” button9->setfixedsize(buttonwidth,buttonheight); bottomlayout->addwidget(button9,0,3); / 第1行第4列 connect(button9,signal(clicked(),this,slot(setoper(); button10 = new qpushbutton(buttontext10,this,buttontext10); / “”

13、button10->setfixedsize(buttonwidth,buttonheight); bottomlayout->addwidget(button10,1,3); /第2行第4列 connect(button10,signal(clicked(),this,slot(setoper(); button11 = new qpushbutton(buttontext11,this,buttontext11); / “ * ” button11->setfixedsize(buttonwidth,buttonheight); bottomlayout->addw

14、idget(button11,2,3); /第3行第4列 connect(button11,signal(clicked(),this,slot(setoper(); button12 = new qpushbutton(buttontext12,this,buttontext12); / “ / ” button12->setfixedsize(buttonwidth,buttonheight); bottomlayout->addwidget(button12,3,3); /第4行第4列 connect(button12,signal(clicked(),this,slot(s

15、etoper(); button13 = new qpushbutton(buttontext13,this,buttontext13); / “ = ” button13->setfixedsize(buttonwidth,buttonheight); bottomlayout->addwidget(button13,3,2); /第4行第3列 connect(button13,signal(clicked(),this,slot(calculate(); /按下,调用calculate函数 button14 = new qpushbutton(buttontext14,this

16、,buttontext14); / 清空 button14->setfixedsize(buttonwidth,buttonheight); bottomlayout->addwidget(button14,3,1); /第4行第2列 connect(button14,signal(clicked(),this,slot(clear(); button15 = new qpushbutton(buttontext15,this,buttontext14); / “ 0 ” button15->setfixedsize(buttonwidth,buttonheight); bo

17、ttomlayout->addwidget(button15,3,0); /第4行第1列 connect(button15,signal(clicked(),this,slot(setvalue();bool cwidget:event(qevent *e)if(e->type() = qevent:keypress) /按钮按下事件qkeyevent *keyevent = static_cast<qkeyevent*>(e);switch(keyevent->key()case qt:key_plus:onclicked(qt:key_plus);break;

18、case qt:key_minus:onclicked(qt:key_minus);break;case qt:key_asterisk:onclicked(qt:key_asterisk);break;case qt:key_slash:onclicked(qt:key_slash);break;case qt:key_equal:calculate();break;return qwidget:event(e);void cwidget:onclicked(int key) /响应按键事件edit->clear(); /按下功能按键,清空显示框edit->settext(tr(

19、"%1").arg(0); /设置光标位置oper = key; /oper重新赋值cwidget.h#include <qstring.h>#include <qevent.h>#include <qmessagebox.h>class cwidget : public qwidget /qwidget类是所有用户界面对象的基类q_object /qobject用于无缝对象通讯的被叫做信号和槽的非常强大的机制。public:cwidget(qwidget *parent=0, char *name=0); /如果parent为0,新的窗口部件变为顶级窗口cwidget();private: /定义的成员只能在该类及其子类中访问qlineedit *edit; / 显示框qpushbutton *button16; / 定义16个按键qvboxlayout *mainlayout; / 垂直布局qhboxlayout *toplayout;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论