Qt实现简单计算器

环境:VS2015集成Qt5.8

计算器功能:对整数实现+、-、*、/、清空编辑框五个小功能。
先看效果图:

这里写图片描述


先说一下思路:
第一步:创建Qt工程
第二步:创建需要的控件,并放在布局中
第三步:实现信号和槽的连接
第四步:实现槽函数
ok,其实Qt不过是一个框架,而且让你实现起来比java语言更容易。


一:创建Qt工程,工程名calculator,继承QDialog,如下图:
这里写图片描述
为了练练手,就没有使用Ui设计师了,所以看看这个目录,只有三个主要的文件:
1:calculatordialog.h:
主要干两件事,声明需要的部件,声明信号和槽函数
2:calculatordialog.cpp:
主要干三件事:初始化部件、实现connect函数、实现槽函数
3:main.cpp://程序入口,创建我们定义的对话框


二:效果看了,思路有了,直接上代码
代码看着有点多,别怕,简单的很,因为太多都是重复的代码。

calculatordialog.h
#ifndef CALCULATORDIALOG_H
#define CALCULATORDIALOG_H

#include <QDialog>
//#include "ui_calculatordialog.h"
#include <QPushButton>
#include <QLineEdit>
#include  <QString>
//这里采用第二种方法加载UI文件,因为是自己的部件,所以不用Ui
class calculatorDialog : public QDialog //,public Ui::calculatorDialog
{
    Q_OBJECT
public:
    explicit calculatorDialog(QWidget *parent = 0);
    ~calculatorDialog();
protected:
    //声明需要的部件
    QPushButton* button_0;
    QPushButton* button_1;
    QPushButton* button_2;
    QPushButton* button_3;
    QPushButton* button_4;
    QPushButton* button_5;
    QPushButton* button_6;
    QPushButton* button_7;
    QPushButton* button_8;
    QPushButton* button_9;
    QPushButton* button_plus;
    QPushButton* button_minus;
    QPushButton* button_multiply;
    QPushButton* button_devide;
    QPushButton* button_equal;
    QPushButton* button_clearAll;

    QLineEdit* lineEdit;

    //声明需要的变量
    //第一个数,第二个数,运算结果
    float num1,num2,result; 
    QString S; //用于显示在lineEdit里面的字符串
    //等号运算符的时候,判断是加、减、乘、除的哪一个
    char sign;
    int mark; //若点击过加减乘除,mark=2,默认是1

    //声明处理按钮点击信号的槽函数
private slots:
    //这种完全按照UI设计师默认的命名规则,          //on_objectName_signalName
    void on_button_0_clicked();  
    void on_button_1_clicked();
    void on_button_2_clicked();
    void on_button_3_clicked();
    void on_button_4_clicked();
    void on_button_5_clicked();
    void on_button_6_clicked();
    void on_button_7_clicked();
    void on_button_8_clicked();
    void on_button_9_clicked();

    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_clearAll_clicked();
};
#endif // CALCULATORDIALOG_H
calculatordialog.cpp
#include "calculatordialog.h"
//#include "ui_calculatordialog.h"
#include <QGridLayout>

calculatorDialog::calculatorDialog(QWidget *parent) :QDialog(parent)
{
    //1:初始化变量
    num1 = 0.0;   //第一个数初始化为0
    num2 = 0.0;    //第二个数初始化为0
    result = 0.0;   //resutlt初始化为0
    S="";   //显示在编辑框的字符串初始化为空
    mark=1;   //表示没有点击过加减乘除
    //初始化部件对象指针
    button_0= new QPushButton("0");
    button_1= new QPushButton("1");
    button_2= new QPushButton("2");
    button_3= new QPushButton("3");
    button_4= new QPushButton("4");
    button_5= new QPushButton("5");
    button_6= new QPushButton("6");
    button_7= new QPushButton("7");
    button_8= new QPushButton("8");
    button_9= new QPushButton("9");
    button_plus= new QPushButton("+");
    button_minus= new QPushButton("-");
    button_multiply= new QPushButton("*");
    button_devide= new QPushButton("/");
    button_equal= new QPushButton("=");
    button_clearAll= new QPushButton("c");

    lineEdit = new QLineEdit("C");

//这里我用的网格布局,感觉比水平和垂直布局整合出来的方便很多
   QGridLayout *Grid = new QGridLayout;
   Grid->addWidget(lineEdit,1,1,1,4,Qt::Alignment());
   //6个参数含义:1:部件的指针;2、3:所在行和列
   //4、5:占用几行和几列;最后一个是对齐方式

   Grid->addWidget(button_0,2,1,Qt::Alignment());
   Grid->addWidget(button_1,2,2,Qt::Alignment());
   Grid->addWidget(button_2,2,3,Qt::Alignment());
   Grid->addWidget(button_3,2,4,Qt::Alignment());

   Grid->addWidget(button_4,3,1,Qt::Alignment());
   Grid->addWidget(button_5,3,2,Qt::Alignment());
   Grid->addWidget(button_6,3,3,Qt::Alignment());
   Grid->addWidget(button_7,3,4,Qt::Alignment());

   Grid->addWidget(button_8,4,1,Qt::Alignment());
   Grid->addWidget(button_9,4,2,Qt::Alignment());
   Grid->addWidget(button_plus,4,3,Qt::Alignment());
   Grid->addWidget(button_minus,4,4,Qt::Alignment());

   Grid->addWidget(button_multiply,5,1,Qt::Alignment());
   Grid->addWidget(button_devide,5,2,Qt::Alignment());
   Grid->addWidget(button_equal,5,3,Qt::Alignment());
   Grid->addWidget(button_clearAll,5,4,Qt::Alignment());

 //把Grid布局设置给当前创建的对话框对象
   this->setLayout(Grid);

//实现连接函数
 connect(button_0,SIGNAL(clicked(bool)),this,SLOT(on_button_0_clicked()));
   connect(button_1,SIGNAL(clicked(bool)),this,SLOT(on_button_1_clicked()));
   connect(button_2,SIGNAL(clicked(bool)),this,SLOT(on_button_2_clicked()));
   connect(button_3,SIGNAL(clicked(bool)),this,SLOT(on_button_3_clicked()));
   connect(button_4,SIGNAL(clicked(bool)),this,SLOT(on_button_4_clicked()));
   connect(button_5,SIGNAL(clicked(bool)),this,SLOT(on_button_5_clicked()));
   connect(button_6,SIGNAL(clicked(bool)),this,SLOT(on_button_6_clicked()));
   connect(button_7,SIGNAL(clicked(bool)),this,SLOT(on_button_7_clicked()));
   connect(button_8,SIGNAL(clicked(bool)),this,SLOT(on_button_8_clicked()));
   connect(button_9,SIGNAL(clicked(bool)),this,SLOT(on_button_9_clicked()));

   connect(button_plus,SIGNAL(clicked(bool)),this,SLOT(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_clearAll,SIGNAL(clicked(bool)),this,SLOT(on_button_clearAll_clicked()));
}

calculatorDialog::~calculatorDialog()
{
}

//实现槽函数
void calculatorDialog::on_button_0_clicked()  //这种完全按照UI设计师默认的命名规则,on_objectName_signalName
{
    S+="0";
    lineEdit->setText(S);//首先把数据设置到编辑框

    if(mark==1){ //判断是不是点击过:加、减、乘、除
     //如果没有
     num1=num1*10;  //继续添加0,相当于乘以10
    }else
        {
       num2 = num2*10; 
    }

}
void calculatorDialog::on_button_1_clicked()
{
    S+="1";
    lineEdit->setText(S);
    if(mark==1){ //判断是不是点击过:加、减、乘、除
     //如果没有
     num1=num1*10+1;  //继续添加6,相当于乘以10,再加1
    }else
        {
       num2 = num2*10+1;
    }
}
void calculatorDialog::on_button_2_clicked()
{
    S+="2";
    lineEdit->setText(S);
    if(mark==1){ //判断是不是点击过:加、减、乘、除
     //如果没有
     num1=num1*10+2;
    }else
        {
       num2 = num2*10+2;
    }
}
void calculatorDialog::on_button_3_clicked()
{
    S+="3";
    lineEdit->setText(S);
       if(mark==1){ //判断是不是点击过:加、减、乘、除
            //如果没有
            num1=num1*10+3;
           }else
               {
              num2 = num2*10+3;
           }
}
void calculatorDialog::on_button_4_clicked()
{
    S+="4";
    lineEdit->setText(S);
    if(mark==1){ //判断是不是点击过:加、减、乘、除
     //如果没有
     num1=num1*10+4;
    }else
        {
       num2 = num2*10+4;
    }
}
void calculatorDialog::on_button_5_clicked()
{
    S+="5";
    lineEdit->setText(S);
    if(mark==1){ //判断是不是点击过:加、减、乘、除
     //如果没有
     num1=num1*10+5;
    }else
        {
       num2 = num2*10+5;
    }
}
void calculatorDialog::on_button_6_clicked()
{
    S+="6";
    lineEdit->setText(S);
    if(mark==1){ //判断是不是点击过:加、减、乘、除
     //如果没有
     num1=num1*10+6;
    }else
        {
       num2 = num2*10+6;
    }
}
void calculatorDialog::on_button_7_clicked()
{
    S+="7";
    lineEdit->setText(S);
    if(mark==7){ //判断是不是点击过:加、减、乘、除
     //如果没有
     num1=num1*10+7;
    }else
        {
       num2 = num2*10+7;
    }
}
void calculatorDialog::on_button_8_clicked()
{
    S+="8";
    lineEdit->setText(S);
    if(mark==1){ //判断是不是点击过:加、减、乘、除
     //如果没有
     num1=num1*10+8;
    }else
        {
       num2 = num2*10+8;
    }
}
void calculatorDialog::on_button_9_clicked()
{
    S+="9";
    lineEdit->setText(S);
    if(mark==1){ //判断是不是点击过:加、减、乘、除
     //如果没有
     num1=num1*10+9;
    }else
        {
       num2 = num2*10+9;
    }
}
void calculatorDialog::on_button_plus_clicked()
{
    S+="+";   //把+连接到字符串S后面
     sign='+';  //设置标记为+
     mark=2;   //告诉其它数字按钮,下一个点击的数,累加到num2上
    lineEdit->setText(S);
}
void calculatorDialog::on_button_minus_clicked()
{
    S+="-";
     sign='-';
     mark=2;
    lineEdit->setText(S);
}
void calculatorDialog::on_button_multiply_clicked(){
    S += "*";
    sign = '*';
    mark = 2;
    lineEdit->setText(S);
}
void calculatorDialog::on_button_devide_clicked(){
    S += "/";
    sign = '/';
    mark = 2;
    lineEdit->setText(S);
}
void calculatorDialog::on_button_equal_clicked()
{
    S+="=";
    switch (sign) {
    case '+':
       result = num1 + num2;
        break;
    case '-':
        result = num1 - num2;
        break;
    case '*':
        result = num1 * num2;
        break;
    case '/':
        result = num1 / num2;
        break;
    default:
        break;
    }
    //S+=QString::number(result, 10);  //这个函数,result必须是int类型
    S+=QString("%1").arg(result);//float转Qstring
    //S+= result+'0'; //不能这样写,result大于等于10就会报错
    lineEdit->setText(S);
}
void calculatorDialog::on_button_clearAll_clicked(){
    S="";
    lineEdit->setText(S);
    //sign=''; //如果bu'sh不设置为,其实也没有影响
    mark=1;
    num1 = 0.0;
    num2 = 0.0;
    result = 0.0;
}

特别把这句提出来说一下: this->setLayout(Grid);
说明1:别忘了添加,这个就是把我们的布局文件添加给当前创建的对话框对象;
说明2:其实纯属的Qt设计师设计的Ui是没办法显示的,也是需要有一个parent作为依托,才能显示出来。在构造函数中会有这一句话:setupUi(this);

难免有理解不到位的地方,大家多交流学习!@_@

  • 62
    点赞
  • 259
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
要在嵌入式Qt实现一个简单的计算器,你需要以下步骤: 1. 在Qt Creator中创建一个新的嵌入式Qt项目。 2. 在项目中创建一个新的Qt Widget应用程序窗口。 3. 在窗口中添加显示器和按钮控件。 4. 为每个按钮设置一个点击事件,以便在单击时执行特定的操作。 5. 创建一个简单的计算器逻辑,使其能够执行加、减、乘、除等基本数学运算。 6. 将计算器逻辑与按钮点击事件连接起来,以便在用户单击按钮时计算结果并将其显示在显示器上。 以下是一个简单的嵌入式Qt计算器示例,它可以执行加、减、乘、除四种基本运算: ```c++ #include <QApplication> #include <QGridLayout> #include <QLabel> #include <QPushButton> #include <QWidget> int main(int argc, char *argv[]) { QApplication a(argc, argv); QWidget window; window.setWindowTitle("Calculator"); QLabel *display = new QLabel("0"); display->setAlignment(Qt::AlignRight); display->setMinimumSize(display->sizeHint()); QPushButton *button0 = new QPushButton("0"); QPushButton *button1 = new QPushButton("1"); QPushButton *button2 = new QPushButton("2"); QPushButton *button3 = new QPushButton("3"); QPushButton *button4 = new QPushButton("4"); QPushButton *button5 = new QPushButton("5"); QPushButton *button6 = new QPushButton("6"); QPushButton *button7 = new QPushButton("7"); QPushButton *button8 = new QPushButton("8"); QPushButton *button9 = new QPushButton("9"); QPushButton *buttonPlus = new QPushButton("+"); QPushButton *buttonMinus = new QPushButton("-"); QPushButton *buttonMultiply = new QPushButton("*"); QPushButton *buttonDivide = new QPushButton("/"); QPushButton *buttonEquals = new QPushButton("="); QGridLayout *layout = new QGridLayout; layout->addWidget(display, 0, 0, 1, 4); layout->addWidget(button7, 1, 0); layout->addWidget(button8, 1, 1); layout->addWidget(button9, 1, 2); layout->addWidget(buttonPlus, 1, 3); layout->addWidget(button4, 2, 0); layout->addWidget(button5, 2, 1); layout->addWidget(button6, 2, 2); layout->addWidget(buttonMinus, 2, 3); layout->addWidget(button1, 3, 0); layout->addWidget(button2, 3, 1); layout->addWidget(button3, 3, 2); layout->addWidget(buttonMultiply, 3, 3); layout->addWidget(button0, 4, 0, 1, 3); layout->addWidget(buttonDivide, 4, 3); layout->addWidget(buttonEquals, 5, 0, 1, 4); window.setLayout(layout); int num1 = 0; int num2 = 0; int result = 0; QString operation = ""; QObject::connect(button0, SIGNAL(clicked()), [&](){ display->setText(display->text() + "0"); }); QObject::connect(button1, SIGNAL(clicked()), [&](){ display->setText(display->text() + "1"); }); QObject::connect(button2, SIGNAL(clicked()), [&](){ display->setText(display->text() + "2"); }); QObject::connect(button3, SIGNAL(clicked()), [&](){ display->setText(display->text() + "3"); }); QObject::connect(button4, SIGNAL(clicked()), [&](){ display->setText(display->text() + "4"); }); QObject::connect(button5, SIGNAL(clicked()), [&](){ display->setText(display->text() + "5"); }); QObject::connect(button6, SIGNAL(clicked()), [&](){ display->setText(display->text() + "6"); }); QObject::connect(button7, SIGNAL(clicked()), [&](){ display->setText(display->text() + "7"); }); QObject::connect(button8, SIGNAL(clicked()), [&](){ display->setText(display->text() + "8"); }); QObject::connect(button9, SIGNAL(clicked()), [&](){ display->setText(display->text() + "9"); }); QObject::connect(buttonPlus, SIGNAL(clicked()), [&](){ num1 = display->text().toInt(); operation = "+"; display->setText(""); }); QObject::connect(buttonMinus, SIGNAL(clicked()), [&](){ num1 = display->text().toInt(); operation = "-"; display->setText(""); }); QObject::connect(buttonMultiply, SIGNAL(clicked()), [&](){ num1 = display->text().toInt(); operation = "*"; display->setText(""); }); QObject::connect(buttonDivide, SIGNAL(clicked()), [&](){ num1 = display->text().toInt(); operation = "/"; display->setText(""); }); QObject::connect(buttonEquals, SIGNAL(clicked()), [&](){ num2 = display->text().toInt(); if (operation == "+") result = num1 + num2; else if (operation == "-") result = num1 - num2; else if (operation == "*") result = num1 * num2; else if (operation == "/") result = num1 / num2; display->setText(QString::number(result)); }); window.show(); return a.exec(); } ``` 这个示例程序将创建一个嵌入式Qt窗口,其中包含一个带有数字按钮和四个操作按钮的简单计算器。当用户单击操作按钮时,将执行相应的计算操作,并在显示器上显示结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值