用qt做计算器,基于qt的计算器设计
开源代码库演示:Qt计算器的实现
思路类ButtonNum:公共q按钮
{
q _对象
公共:
ButtonNum(int I);
(同Internationalorganizations)国际组织索引;
专用插槽:
void单击按钮();
信号:
void发送号(int number);
};上面的代码说明了我们大概的想法:
1、定义一个数字按钮类:ButtonNum,它的作用就是提供按钮上的数字给处理计算的类w计算器。
2、为了能使按钮数量类能发出它上面的数字,我们自定义一个信号:sendNumber(int),那么w计算器只要观察这个信号,就可以收到按键上的数字。
3、发出这个信号的时机就在按键被点击时,为此,我们自定义一个槽函数来连接到按键的点击事件,然后在槽函数中发出这个信号。
具体代码如下:
ButtonNum:ButtonNum(int I):q button(QString:number(I)),index(i){
connect(this,SIGNAL(clicked(bool))、this,SLOT(click button());
};//将自定义槽函数与按键的点击信号连接起来
void ButtonNum:clickButton(){
发出发送号码(索引);//发出信号
}在w计算器处理计算的过程,我们是这样想的:
类w计算器:公共对话框
{
q _对象
公共:
WCalculator(q widget * parent=nullptr);
~ w计算器();
button num * button _ num[10];//10 个数字
//控制按键
QPushButton * button _ plus//按键
q button * button _ MINUS//按键-
q button * button _ multiply//按键*
q button * button _ devide//按键/
q button * button _ equal//按键=
QPushButton * button _ clear _ all//清除按键c
QLineEdit * lineEdit//显示框
float num1,num2,result//临时变量,在计算过程中使用
QString S;//用于组装显示内容
茶符号;//用于识别控制按键,以此进行相应的操作
(同Internationalorganizations)国际组织标记;
void on _ button _ plus _ clicked();//控制按键对应的槽函数
//控制按键对应的槽函数
专用插槽:
void on _ button _ MINUS _ clicked();
void on _ button _ multiply _ clicked();
void on _ button _ devide _ clicked();
void on _ button _ equal _ clicked();
void on _ button _ clear _ all _ clicked();
void接收号(int I);
};放在专用插槽下的槽函数与简单的放在公众的下的槽函数,在连接的写法上有些区别,举个例子吧:
专用插槽形式的:
connect(button_minus,SIGNAL(clicked(bool))、this、SLOT(on _ button _ MINUS _ clicked());公众的下的槽函数:
connect(button_minus,QPushButton:clicked,this,WCalculator:on _ button _ MINUS _ clicked);这个计算器的实现不是全面的,它只能支持形如:2 2=4 这种形式的一次计算,下次计算就得按清除键重置,然后依次按数字-运算符-数字-等于号。这个例子旨在使用一些信号与槽函数的概念。
w计算器的实现代码:
#包含栅格布局
#包含调试器
#include wcalculator.h
#包含 ./ui_wcalculator.h
WCalculator:WCalculator(q widget * parent)
:QDialog(父)
{
num1=0.0
num2=0.0
结果=0.0;
s=
符号=-1;
mark=1;
line edit=new QLineEdit( C );
QGridLayout * Grid=new QGridLayout;
Grid- addWidget(lineEdit,1,0,1,4,Qt:Alignment());
for(int I=0;i 10i ){
button _ num[I]=new ButtonNum(I);
}
q按钮*按钮[6];
button _ plus=新q按钮();
button _ MINUS=新q按钮(-);
button _ multiply=新q按钮( * );
button _ devide=new q button(/);
button _ equal=新q按钮(=);
button _ clear _ all=新q按钮( c );
button[0]=button _ plus;
button[1]=button _ MINUS;
button[2]=button _ multiply;
button[3]=button _ devide;
button[4]=button _ equal;
button[5]=button _ clear _ all;
for(int I=1;i5;i ){
for(int j=0;j 4;j ){
int num _ arr _ index=(I-1)* 4j;
qDebug()(I-1)* 4j Qt:endl;
if(num_arr_index 10){
grid-add widget((q push button *)button _ num[num _ arr _ index],i 1,j,Qt:Alignment());
connect(button _ num[num _ arr _ index],SIGNAL(sendNumber(int)),this,SLOT(receive number(int)));
}否则{
grid-add widget(button[num _ arr _ index-10],i 1,j,Qt:Alignment());
}
}
}
this- setLayout(网格);
connect(button_plus,QPushButton:clicked,this,WCalculator:on _ button _ plus _ clicked);
connect(button_minus,SIGNAL(clicked(bool))、this、SLOT(on _ button _ MINUS _ clicked());
connect(button_multiply,SIGNAL(clicked(bool))、this、SLOT(on _ button _ multiply _ clicked());
connect(button_devide,SIGNAL(clicked(bool))、this、SLOT(on _ button _ devide _ clicked());
connect(button_equal,SIGNAL(clicked(bool))、this、SLOT(on _ button _ equal _ clicked());
connect(button_clear_all,SIGNAL(clicked(bool))、this、SLOT(on _ button _ clear _ all _ clicked());
}
void w计算器:接收数(整数){
S=QString:number(数字);
line edit-setText;
if(mark==1){
数字1=数字1 * 10个数;
}否则{
数字2=数字2 * 10个数;
}
}
void w计算器:on _ button _ plus _ clicked(){
s=
符号="";
mark=2;
line edit-setText;
}
void w计算器:on _ button _ MINUS _ clicked(){
s=-;
符号=-;
mark=2;
line edit-setText;
}
void w计算器:on _ button _ multiply _ clicked(){
s=" *
符号= *
mark=2;
line edit-setText;
}
void w calculator:on _ button _ devide _ clicked(){
s=/;
sign=/;
mark=2;
line edit-setText;
}
void w计算器:on _ button _ equal _ clicked(){
S==
开关(标志){
案例"":
结果=num1 num2
打破;
大小写-:
结果=num 1-num 2;
打破;
大小写 * :
结果=数量1 *数量2
打破;
案例"/":
结果=数字1/数字2;
打破;
默认值:
打破;
}
S=QString(%1 ).参数(结果);
line edit-setText;
}
void w calculator:on _ button _ clear _ all _ clicked(){
num1=0.0
num2=0.0
结果=0.0;
符号=-1;
mark=1;
s=
line edit-setText;
}
WCalculator:~WCalculator()
{
}
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。