简易计算器代码
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
button[9] = new QPushButton(buttontext[9],this,buttontext[9]); // “ + ”
button[9]->setFixedSize(BUTTONWIDTH,BUTTONHEIGHT);
bottomLayout->addWidget(button[9],0,3); //第1行第4列
topLayout = new QHBoxLayout(mainLayout,30); //水平布局,包含在mainLayout里,水平间隔30
edit = new QLineEdit(this,"edit"); //
edit->setAlignment(Qt::AlignRight); //数值从右边开始出来
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() //析构函数,销毁各个按键
switch(KeyEvent->key())
{
case Qt::Key_Plus:
onClicked(Qt::Key_Plus);break;
case Qt::Key_Minus:
onClicked(Qt::Key_Minus);break;
case Qt::Key_Asterisk:
onClicked(Qt::Key_Asterisk);break;
if(str == "+")
onClicked(Qt::Key_Plus); //Qt中使用的“+”键的名称
else if(str == "-")
onClicked(Qt::Key_Minus); //Qt中使用的“—”键的名称。
else if(str == "*")
onClicked(Qt::Key_Asterisk); //Qt中使用的“*”键的名称。
button[11]->setFixedSize(BUTTONWIDTH,BUTTONHEIGHT);
bottomLayout->addWidget(button[11],2,3); //第3行第4列
connect(button[11],SIGNAL(clicked()),this,SLOT(setOper()));
else if(str == "/")
onClicked(Qt::Key_Slash); //Qt中使用的“/”键的名称。
else if(str == "=")
onClicked(Qt:: Key_Equal); //点击等于号,调用计算函数
}
void CWidget::clear()
{
edit->clear(); //清空显示框,clear()为内部函数
button[12] = new QPushButton(buttontext[12],this,buttontext[12]); // “ / ”
button[12]->setFixedSize(BUTTONWIDTH,BUTTONHEIGHT);
bottomLayout->addWidget(button[12],3,3); //第4行第4列
connect(button[15],SIGNAL(clicked()),this,SLOT(setValue()));
}
bool CWidget::event(QEvent *e)
{
if(e->type() == QEvent::KeyPress) //按钮按下事件
{
QKeyEvent *KeyEvent = static_cast<QKeyEvent*>(e);
{
firstNum = 0;
secondNum = 0;
oper = -1;
}
void CWidget::createForm()
{
setMinimumSize(80,200); //最小窗口
setMaximumSize(80,200); //最大窗口
mainLayout = new QVBoxLayout(this,20); //整体布局,以当前窗口为基准,(垂直间隔)离边界20
}
if(-1==oper) //没有按加减乘除、等于、清空键
{
firstNum = tempStr.toInt(); //把tempStr转换成整型数,赋给第一个计算数
edit->setText(QString::number(firstNum)); //变成字符串之后,显示
}
Else //之前按过加减乘除、等于、清空键
button[n]->setFixedSize(BUTTONWIDTH,BUTTONHEIGHT); //设置按键大小
bottomLayout->addWidget(button[n],r,c); //从右上角为第1(r+1)行,第1(c+1)列
connect(button[n],SIGNAL(clicked()),this,SLOT(setValue()));
if(tempStr.length() < edit->maxLength()) //小于显示框允许的最大位数
tempStr += ((QPushButton *)sender())->text(); //将按键对应的数值添加tempStr
else
{
QMessageBox::information( this, tr("Calculator"),tr("too long!")); //位数过多,报错
connect(button[9],SIGNAL(clicked()),this,SLOT(setOper()));
button[10] = new QPushButton(buttontext[10],this,buttontext[10]); // “—”
button[10]->setFixedSiBaidu Nhomakorabeae(BUTTONWIDTH,BUTTONHEIGHT);
#define BUTTONWIDTH 30 //定义按键的长度
#define BUTTONHEIGHT 30 //定义按键的宽度
static char *buttontext[] =//定义静态全局变量
{
KEY_1,KEY_2,KEY_3,KEY_4,
KEY_5,KEY_6,KEY_7,KEY_8,
{
delete edit;
delete *button;
delete mainLayout;
delete topLayout;
delete bottomLayout;
}
void CWidget::calculate() //响应按键“=”,调用计算功能
{
switch(oper)
{
case Qt::Key_Plus: //加法
int n;
for(int r=0; r<3; r++) //1~9阵列
for(int c=0; c<3; c++)
{
n = c+3*r;
button[n] = new QPushButton(buttontext[n],this,buttontext[n]); //构造一个名称为n、父对象为parent并且文本为n的推动按钮
connect(button[12],SIGNAL(clicked()),this,SLOT(setOper()));
button[13] = new QPushButton(buttontext[13],this,buttontext[13]); // “ = ”
button[13]->setFixedSize(BUTTONWIDTH,BUTTONHEIGHT);
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
{
secondNum = tempStr.toInt();
edit->setText(QString::number(secondNum));
}
}
void CWidget::setOper() //将按键转换成qt能识别的语言
{
QString str=((QPushButton *)sender())->text();
button[15] = new QPushButton(buttontext[15],this,buttontext[14]); // “0 ”
button[15]->setFixedSize(BUTTONWIDTH,BUTTONHEIGHT);
bottomLayout->addWidget(button[15],3,0); //第4行第1列
button[14]->setFixedSize(BUTTONWIDTH,BUTTONHEIGHT);
bottomLayout->addWidget(button[14],3,1); //第4行第2列
connect(button[14],SIGNAL(clicked()),this,SLOT(clear()));
firstNum /= secondNum;break;
default:
firstNum = firstNum;
}
edit->setText(QString::number(firstNum));
}
void CWidget::setValue()
{
QString tempStr;
tempStr = edit->text(); //显示框中的数值赋给tempStr
edit->setText(tr("%1").arg(0)); //这个函数可获取文本编辑框中光标的位置,并显示在状态栏中
//setText(tr(“%1行%2列”).arg(rowNum).arg(colNum));
initialize(); //调用初始化函数
}
void CWidget::initialize()
firstNum += secondNum;break;
case Qt::Key_Minus: //减法
firstNum -= secondNum;break;
case Qt::Key_Asterisk: //乘法
firstNum *= secondNum;break;
case Qt::Key_Slash: //除法
bottomLayout->addWidget(button[13],3,2); //第4行第3列
connect(button[13],SIGNAL(clicked()),this,SLOT(calculate())); //按下,调用calculate函数
button[14] = new QPushButton(buttontext[14],this,buttontext[14]); //清空
bottomLayout->addWidget(button[10],1,3); //第2行第4列
connect(button[10],SIGNAL(clicked()),this,SLOT(setOper()));
button[11] = new QPushButton(buttontext[11],this,buttontext[11]); // “ * ”
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"
#define 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"
button[9] = new QPushButton(buttontext[9],this,buttontext[9]); // “ + ”
button[9]->setFixedSize(BUTTONWIDTH,BUTTONHEIGHT);
bottomLayout->addWidget(button[9],0,3); //第1行第4列
topLayout = new QHBoxLayout(mainLayout,30); //水平布局,包含在mainLayout里,水平间隔30
edit = new QLineEdit(this,"edit"); //
edit->setAlignment(Qt::AlignRight); //数值从右边开始出来
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() //析构函数,销毁各个按键
switch(KeyEvent->key())
{
case Qt::Key_Plus:
onClicked(Qt::Key_Plus);break;
case Qt::Key_Minus:
onClicked(Qt::Key_Minus);break;
case Qt::Key_Asterisk:
onClicked(Qt::Key_Asterisk);break;
if(str == "+")
onClicked(Qt::Key_Plus); //Qt中使用的“+”键的名称
else if(str == "-")
onClicked(Qt::Key_Minus); //Qt中使用的“—”键的名称。
else if(str == "*")
onClicked(Qt::Key_Asterisk); //Qt中使用的“*”键的名称。
button[11]->setFixedSize(BUTTONWIDTH,BUTTONHEIGHT);
bottomLayout->addWidget(button[11],2,3); //第3行第4列
connect(button[11],SIGNAL(clicked()),this,SLOT(setOper()));
else if(str == "/")
onClicked(Qt::Key_Slash); //Qt中使用的“/”键的名称。
else if(str == "=")
onClicked(Qt:: Key_Equal); //点击等于号,调用计算函数
}
void CWidget::clear()
{
edit->clear(); //清空显示框,clear()为内部函数
button[12] = new QPushButton(buttontext[12],this,buttontext[12]); // “ / ”
button[12]->setFixedSize(BUTTONWIDTH,BUTTONHEIGHT);
bottomLayout->addWidget(button[12],3,3); //第4行第4列
connect(button[15],SIGNAL(clicked()),this,SLOT(setValue()));
}
bool CWidget::event(QEvent *e)
{
if(e->type() == QEvent::KeyPress) //按钮按下事件
{
QKeyEvent *KeyEvent = static_cast<QKeyEvent*>(e);
{
firstNum = 0;
secondNum = 0;
oper = -1;
}
void CWidget::createForm()
{
setMinimumSize(80,200); //最小窗口
setMaximumSize(80,200); //最大窗口
mainLayout = new QVBoxLayout(this,20); //整体布局,以当前窗口为基准,(垂直间隔)离边界20
}
if(-1==oper) //没有按加减乘除、等于、清空键
{
firstNum = tempStr.toInt(); //把tempStr转换成整型数,赋给第一个计算数
edit->setText(QString::number(firstNum)); //变成字符串之后,显示
}
Else //之前按过加减乘除、等于、清空键
button[n]->setFixedSize(BUTTONWIDTH,BUTTONHEIGHT); //设置按键大小
bottomLayout->addWidget(button[n],r,c); //从右上角为第1(r+1)行,第1(c+1)列
connect(button[n],SIGNAL(clicked()),this,SLOT(setValue()));
if(tempStr.length() < edit->maxLength()) //小于显示框允许的最大位数
tempStr += ((QPushButton *)sender())->text(); //将按键对应的数值添加tempStr
else
{
QMessageBox::information( this, tr("Calculator"),tr("too long!")); //位数过多,报错
connect(button[9],SIGNAL(clicked()),this,SLOT(setOper()));
button[10] = new QPushButton(buttontext[10],this,buttontext[10]); // “—”
button[10]->setFixedSiBaidu Nhomakorabeae(BUTTONWIDTH,BUTTONHEIGHT);
#define BUTTONWIDTH 30 //定义按键的长度
#define BUTTONHEIGHT 30 //定义按键的宽度
static char *buttontext[] =//定义静态全局变量
{
KEY_1,KEY_2,KEY_3,KEY_4,
KEY_5,KEY_6,KEY_7,KEY_8,
{
delete edit;
delete *button;
delete mainLayout;
delete topLayout;
delete bottomLayout;
}
void CWidget::calculate() //响应按键“=”,调用计算功能
{
switch(oper)
{
case Qt::Key_Plus: //加法
int n;
for(int r=0; r<3; r++) //1~9阵列
for(int c=0; c<3; c++)
{
n = c+3*r;
button[n] = new QPushButton(buttontext[n],this,buttontext[n]); //构造一个名称为n、父对象为parent并且文本为n的推动按钮
connect(button[12],SIGNAL(clicked()),this,SLOT(setOper()));
button[13] = new QPushButton(buttontext[13],this,buttontext[13]); // “ = ”
button[13]->setFixedSize(BUTTONWIDTH,BUTTONHEIGHT);
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
{
secondNum = tempStr.toInt();
edit->setText(QString::number(secondNum));
}
}
void CWidget::setOper() //将按键转换成qt能识别的语言
{
QString str=((QPushButton *)sender())->text();
button[15] = new QPushButton(buttontext[15],this,buttontext[14]); // “0 ”
button[15]->setFixedSize(BUTTONWIDTH,BUTTONHEIGHT);
bottomLayout->addWidget(button[15],3,0); //第4行第1列
button[14]->setFixedSize(BUTTONWIDTH,BUTTONHEIGHT);
bottomLayout->addWidget(button[14],3,1); //第4行第2列
connect(button[14],SIGNAL(clicked()),this,SLOT(clear()));
firstNum /= secondNum;break;
default:
firstNum = firstNum;
}
edit->setText(QString::number(firstNum));
}
void CWidget::setValue()
{
QString tempStr;
tempStr = edit->text(); //显示框中的数值赋给tempStr
edit->setText(tr("%1").arg(0)); //这个函数可获取文本编辑框中光标的位置,并显示在状态栏中
//setText(tr(“%1行%2列”).arg(rowNum).arg(colNum));
initialize(); //调用初始化函数
}
void CWidget::initialize()
firstNum += secondNum;break;
case Qt::Key_Minus: //减法
firstNum -= secondNum;break;
case Qt::Key_Asterisk: //乘法
firstNum *= secondNum;break;
case Qt::Key_Slash: //除法
bottomLayout->addWidget(button[13],3,2); //第4行第3列
connect(button[13],SIGNAL(clicked()),this,SLOT(calculate())); //按下,调用calculate函数
button[14] = new QPushButton(buttontext[14],this,buttontext[14]); //清空
bottomLayout->addWidget(button[10],1,3); //第2行第4列
connect(button[10],SIGNAL(clicked()),this,SLOT(setOper()));
button[11] = new QPushButton(buttontext[11],this,buttontext[11]); // “ * ”
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"
#define 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"