前言:由于之后接触到的东西要用到QT,装好QT之后决定先在上面写一个小程序——计算器。首先简单学习了一下QT基本操作,布局,信号槽。上网查找了一些QT的操作资料。能力不够,写出来了一个功能不全还花里胡哨的计算器(此处算是自我批评,认真的),看到后面你们就知道了。
一.创建工程:
打开Qt Creator,点击New Project创建工程,照着下面指示做就好了,比较简单。
填写名称和路径,然后下一步
可以自己修改类名
点击完成,然后点击完成,程序就创建好了。
二.界面设计
双击后缀为.ui的文件,进入设计界面
这是我设计的计算器界面,绿色部分是2个Label控件,用于显示。其他的都是QPushButton控件,可以点击,我修改了它们的名字,方便之后的操作。例如按钮0:名字改成button_0。当然不改也是可以的
到这里可以运行一下,可以看到还没有添加功能的界面
三.代码部分
右击项目,选择添加新文件,C++,C++Class。
然后类名就叫own。
这样可以方便区分代码的各个层面,也是我们应该养成的习惯。
own.h
#ifndef OWN_H
#define OWN_H
#include <Qstring>
#include <QtMath>
class own
{
public:
own();
void set_num1(double num); //获取这两个数
void set_num2(double num);
void set_sign(QString sign); //获取操作符
QString result(); //运算的结果
private:
double num1; //定义两个浮点数
double num2;
QString sign; //操作符
};
#endif // OWN_H
own.cpp
#include "own.h"
own::own() //构造函数
{
this->num1=0;
this->num2=0;
}
void own::set_num1(double num)
{
this->num1=num;
}
void own::set_num2(double num)
{
this->num2=num;
}
void own::set_sign(QString sign)
{
this->sign=sign;
}
//双目运算符:加减乘除
QString own::result()
{
double result;
if(this->sign.length()>1)
return "ERROR"; //返回字符串,返回值是QString型
if(this->sign=="+")
{
result=num1+num2;
}
else if(this->sign=="-")
{
result=num1-num2;
}
else if(this->sign=="*")
{
result=num1*num2;
}
else if(this->sign=="÷")
{
if(this->num2==0)
return "ERROR";
result=num1/num2;
}
else
{
return QString::number(this->num1);
}
return QString::number(result); //将结果转换成QString型
}
calculator.h
#ifndef CALCULATOR_H
#define CALCULATOR_H
#include <QMainWindow>
#include <QString>
#include "own.h"
/*#include <QPushButton>
#include <QLineEdit>*/
namespace Ui {
class calculator;
}
class calculator : public QMainWindow
{
Q_OBJECT
public:
explicit calculator(QWidget *parent = 0);
~calculator();
private slots:
void on_btn_0_clicked();
void on_btn_1_clicked();
void on_btn_2_clicked();
void on_btn_3_clicked();
void on_btn_4_clicked();
void on_btn_5_clicked();
void on_btn_6_clicked();
void on_btn_7_clicked();
void on_btn_8_clicked();
void on_btn_9_clicked();
void on_btn_add_clicked();
void on_btn_sub_clicked();
void on_btn_mul_clicked();
void on_btn_div_clicked();
void on_btn_equal_clicked();
void on_btn_clear_clicked();
void on_btn_delete_clicked();
void on_btn_point_clicked();
private:
Ui::calculator *ui;
QString tmp; //获取Label_1
QString all; //获取Label_2
own *own1;
};
#endif // CALCULATOR_H
calculator.cpp
#include "calculator.h"
#include "ui_calculator.h"
#include "own.h"
calculator::calculator(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::calculator)
{
own1=new own;
ui->setupUi(this);
//连接信号
connect(this->ui->button_0,SIGNAL(clicked(bool)),this,SLOT(on_btn_0_clicked()));
connect(this->ui->button_1,SIGNAL(clicked(bool)),this,SLOT(on_btn_1_clicked()));
connect(this->ui->button_2,SIGNAL(clicked(bool)),this,SLOT(on_btn_2_clicked()));
connect(this->ui->button_3,SIGNAL(clicked(bool)),this,SLOT(on_btn_3_clicked()));
connect(this->ui->button_4,SIGNAL(clicked(bool)),this,SLOT(on_btn_4_clicked()));
connect(this->ui->button_5,SIGNAL(clicked(bool)),this,SLOT(on_btn_5_clicked()));
connect(this->ui->button_6,SIGNAL(clicked(bool)),this,SLOT(on_btn_6_clicked()));
connect(this->ui->button_7,SIGNAL(clicked(bool)),this,SLOT(on_btn_7_clicked()));
connect(this->ui->button_8,SIGNAL(clicked(bool)),this,SLOT(on_btn_8_clicked()));
connect(this->ui->button_9,SIGNAL(clicked(bool)),this,SLOT(on_btn_9_clicked()));
connect(this->ui->button_add,SIGNAL(clicked(bool)),this,SLOT(on_btn_add_clicked()));
connect(this->ui->button_sub,SIGNAL(clicked(bool)),this,SLOT(on_btn_sub_clicked()));
connect(this->ui->button_mul,SIGNAL(clicked(bool)),this,SLOT(on_btn_mul_clicked()));
connect(this->ui->button_div,SIGNAL(clicked(bool)),this,SLOT(on_btn_div_clicked()));
connect(this->ui->button_equal,SIGNAL(clicked(bool)),this,SLOT(on_btn_equal_clicked()));
connect(this->ui->button_clear,SIGNAL(clicked(bool)),this,SLOT(on_btn_clear_clicked()));
connect(this->ui->button_point,SIGNAL(clicked(bool)),this,SLOT(on_btn_point_clicked()));
connect(this->ui->button_delete,SIGNAL(clicked(bool)),this,SLOT(on_btn_delete_clicked()));
tmp="";
all="";
}
calculator::~calculator()
{
delete ui;
}
calculator.cpp绑定所有槽函数
void calculator::on_btn_0_clicked()
{
tmp+=ui->button_0->text();
this->ui->label->setText(tmp);
all+="0";
this->ui->label_2->setText(all);
}
void calculator::on_btn_1_clicked()
{
tmp+=ui->button_1->text();
this->ui->label->setText(tmp);
all+="1";
this->ui->label_2->setText(all);
}
void calculator::on_btn_2_clicked()
{
tmp+=ui->button_2->text();
this->ui->label->setText(tmp);
all+="2";
this->ui->label_2->setText(all);
}
void calculator::on_btn_3_clicked()
{
tmp+=ui->button_3->text();
this->ui->label->setText(tmp);
all+="3";
this->ui->label_2->setText(all);
}
void calculator::on_btn_4_clicked()
{
tmp+=ui->button_4->text();
this->ui->label->setText(tmp);
all+="4";
this->ui->label_2->setText(all);
}
void calculator::on_btn_5_clicked()
{
tmp+=ui->button_5->text();
this->ui->label->setText(tmp);
all+="5";
this->ui->label_2->setText(all);
}
void calculator::on_btn_6_clicked()
{
tmp+=ui->button_6->text();
this->ui->label->setText(tmp);
all+="6";
this->ui->label_2->setText(all);
}
void calculator::on_btn_7_clicked()
{
tmp+=ui->button_7->text();
this->ui->label->setText(tmp);
all+="7";
this->ui->label_2->setText(all);
}
void calculator::on_btn_8_clicked()
{
tmp+=ui->button_8->text();
this->ui->label->setText(tmp);
all+="8";
this->ui->label_2->setText(all);
}
接上:
void calculator::on_btn_9_clicked()
{
tmp+=ui->button_9->text();
this->ui->label->setText(tmp);
all+="9";
this->ui->label_2->setText(all);
}
void calculator::on_btn_point_clicked()
{
tmp+=ui->button_point->text();
this->ui->label->setText(tmp);
all+=".";
this->ui->label_2->setText(all);
}
void calculator::on_btn_add_clicked()
{
float num=tmp.toFloat();
own1->set_num1(num);
tmp="";
QString ex=ui->button_add->text();
own1->set_sign(ex);
all+="+";
this->ui->label_2->setText(all);
}
void calculator::on_btn_sub_clicked()
{
float num=tmp.toFloat();
own1->set_num1(num);
tmp="";
QString ex=ui->button_sub->text();
own1->set_sign(ex);
all+="-";
this->ui->label_2->setText(all);
}
void calculator::on_btn_mul_clicked()
{
float num=tmp.toFloat();
own1->set_num1(num);
tmp="";
QString ex=ui->button_mul->text();
own1->set_sign(ex);
all+="*";
this->ui->label_2->setText(all);
}
void calculator::on_btn_div_clicked()
{
float num=tmp.toFloat();
own1->set_num1(num);
tmp="";
QString ex=ui->button_div->text();
own1->set_sign(ex);
all+="÷";
this->ui->label_2->setText(all);
}
void calculator::on_btn_equal_clicked()
{
float num=tmp.toFloat();
own1->set_num2(num);
QString res=own1->result();
ui->label->setText(res);
tmp=res; //将计算结果赋值给tmp,可以用结果继续计算
all+="=";
this->ui->label_2->setText(all);
}
接上:
void calculator::on_btn_clear_clicked() //清空置零
{
tmp="";
ui->label->setText("0");
all="";
this->ui->label_2->setText(all);
}
void calculator::on_btn_delete_clicked() //删除前一个字符
{
tmp=tmp.left(tmp.length()-1);
this->ui->label->setText(tmp);
all=all.left(all.length()-1);
this->ui->label_2->setText(all);
}
main.cpp
#include "calculator.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
calculator w;
w.show();
return a.exec();
}
运行之后的界面
后序:由于第一次使用QT做项目,对QT还不是很熟悉,还有很多控件不了解,目前只做出来简单的计算器,还需要插入菜单、跳转事件等功能,还有这段代码最大的缺点是只是对字符串进行了操作,不能区别优先级和括号。后面如果要写功能更多的计算器,要运用到数据结构中的堆栈。下去学习一下之后会再写一个功能完整些的计算器。