本文共 8853 字,大约阅读时间需要 29 分钟。
前言:由于之后接触到的东西要用到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#include 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#include #include "own.h"/*#include #include */namespace Ui {class calculator;}class calculator : public QMainWindow{ Q_OBJECTpublic: 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"#includeint main(int argc, char *argv[]){ QApplication a(argc, argv); calculator w; w.show(); return a.exec();}
运行之后的界面
后序:由于第一次使用QT做项目,对QT还不是很熟悉,还有很多控件不了解,目前只做出来简单的计算器,还需要插入菜单、跳转事件等功能,还有这段代码最大的缺点是只是对字符串进行了操作,不能区别优先级和括号。后面如果要写功能更多的计算器,要运用到数据结构中的堆栈。下去学习一下之后会再写一个功能完整些的计算器。
转载地址:http://qyhgn.baihongyu.com/