zoukankan      html  css  js  c++  java
  • 使用qt制作一个简单的计算器

    前言:今天使用qt制作了一个很简单的计算器,觉得挺有意思的,所以在这里跟大家分享一下。

    这里先跟大家说说使用到的函数:

    一、槽连接函数

    connect(信号发送者,发送的信号,信号接收者,信号接收者的槽函数)   //前面我有一篇文章已经介绍过槽函数的使用了,大家有兴趣可以看看,这里就不详细说了。 

    二、取出按钮中的字符

    QString line = ui->pushButton1->text() //取出按钮pushButton1中的字符存放到line中

    三、设置输入框中显示的内容

    ui->lineEdit->setText(line); //设置输入框lineEdit中显示的内容,line为要显示的内容

    四、清空字符数组

    line.clear(); //清空字符数组line中的内容

    五、将字符转换成整形、浮点型、数值

    double sum = temp1.toDouble() + temp2.toDouble(); //将字符转换成浮点型

    六、将整形、浮点型、数值转换成字符

     ui->lineEdit->setText(QString::number(sum)); //将浮点型转换成字符

    七、从字符的最后一位开始往开头的方向按位删除字符

     line.chop(1); //尾剔除,即是从字符串后面开始按位删除,每次删除字符数组line中的一位,如果是2则是每次两位,依次类推

    下面是头文件widget.h中的代码:

     1 #ifndef WIDGET_H
     2 #define WIDGET_H
     3 
     4 #include <QWidget>
     5 #include <QString>
     6 
     7 namespace Ui {
     8 class Widget;
     9 }
    10 
    11 class Widget : public QWidget
    12 {
    13     Q_OBJECT
    14 
    15 public:
    16     explicit Widget(QWidget *parent = 0);
    17     ~Widget();
    18 
    19 protected slots:
    20     void item0();//0
    21     void item1();//1
    22     void item2();//2
    23     void item3();//3
    24     void item4();//4
    25     void item5();//5
    26     void item6();//6
    27     void item7();//7
    28     void item8();//8
    29     void item9();//9
    30     void sub();//减号
    31     void div();//除号
    32     void mul();//乘号
    33     void cancel();//取消
    34     void delet();//尾剔除
    35     void add();//加号
    36     void equal();//等于号
    37     void point();//小数点
    38 
    39 private:
    40     Ui::Widget *ui;
    41 
    42 };
    43 
    44 #endif // WIDGET_H

    源文件widget.cpp中的代码:

      1 #include "widget.h"
      2 #include "ui_widget.h"
      3 #include <QString>
      4 #include <QDebug>
      5 #include <stdlib.h>
      6 #include <string.h>
      7 Widget::Widget(QWidget *parent) :
      8     QWidget(parent),
      9     ui(new Ui::Widget)
     10 {
     11     ui->setupUi(this);
     12 
     13     //连接槽函数
     14     connect(ui->pushButton0,SIGNAL(clicked(bool)),this,SLOT(item0())); //0
     15     connect(ui->pushButton1,SIGNAL(clicked(bool)),this,SLOT(item1())); //1
     16     connect(ui->pushButton2,SIGNAL(clicked(bool)),this,SLOT(item2())); //2
     17     connect(ui->pushButton3,SIGNAL(clicked(bool)),this,SLOT(item3())); //3
     18     connect(ui->pushButton4,SIGNAL(clicked(bool)),this,SLOT(item4())); //4
     19     connect(ui->pushButton5,SIGNAL(clicked(bool)),this,SLOT(item5())); //5
     20     connect(ui->pushButton6,SIGNAL(clicked(bool)),this,SLOT(item6())); //6
     21     connect(ui->pushButton7,SIGNAL(clicked(bool)),this,SLOT(item7())); //7
     22     connect(ui->pushButton8,SIGNAL(clicked(bool)),this,SLOT(item8())); //8
     23     connect(ui->pushButton9,SIGNAL(clicked(bool)),this,SLOT(item9())); //9
     24 
     25     connect(ui->pushButton_c,SIGNAL(clicked(bool)),this,SLOT(cancel()));//取消
     26     connect(ui->pushButton_add,SIGNAL(clicked(bool)),this,SLOT(add()));//加号
     27     connect(ui->pushButton_equal,SIGNAL(clicked(bool)),this,SLOT(equal()));//等于号
     28     connect(ui->pushButton_point,SIGNAL(clicked(bool)),this,SLOT(point()));//小数点
     29     connect(ui->pushButton_div,SIGNAL(clicked(bool)),this,SLOT(div()));//除号
     30     connect(ui->pushButton_sub,SIGNAL(clicked(bool)),this,SLOT(sub()));//减号
     31     connect(ui->pushButton_mul,SIGNAL(clicked(bool)),this,SLOT(mul()));//乘号
     32     connect(ui->pushButton_delete,SIGNAL(clicked(bool)),this,SLOT(delet()));//尾剔除
     33 }
     34 
     35 
     36 QString line;
     37 QString item_0; //0
     38 QString item_1; //1
     39 QString item_2; //2
     40 QString item_3;//3
     41 QString item_4;//4
     42 QString item_5;//5
     43 QString item_6;//6
     44 QString item_7;//7
     45 QString item_8;//8
     46 QString item_9;//9
     47 QString temp1,temp2; //临时存放两次输入的要进行计算的项
     48 double sum = 0;  //计算后的结果
     49 int flag = 0,flag1 = 0; //flag加号标志,flag1等于号标志
     50 int flag3 = 0;//减号标志
     51 int flag4 = 0;//乘号标志
     52 int flag5 = 0;//除号标志
     53 Widget::~Widget()
     54 {
     55     delete ui;
     56 }
     57 
     58 void Widget::item0() //0
     59 {
     60     item_0 = ui->pushButton0->text(); //获取按键中的字符"0"
     61     line += item_0;//每按一次按键就相加一次按键中的字符"0"
     62     ui->lineEdit->setText(line); //显示到输入条中
     63 }
     64 
     65 void Widget::item1() //1
     66 {
     67     item_1 = ui->pushButton1->text();
     68     line += item_1;
     69     ui->lineEdit->setText(line);
     70 }
     71 
     72 void Widget::item2() //2
     73 {
     74    item_2 = ui->pushButton2->text(); //获取按键中的字符"2"
     75    line += item_2; //每按一次按键就相加一次按键中的字符"2"
     76    ui->lineEdit->setText(line);
     77 }
     78 
     79 
     80 void Widget::item3() //3
     81 {
     82    item_3 = ui->pushButton3->text(); //获取按键中的字符"3"
     83    line += item_3; //每按一次按键就相加一次按键中的字符"3"
     84    ui->lineEdit->setText(line);
     85 }
     86 
     87 void Widget::item4() //4
     88 {
     89     item_4 = ui->pushButton4->text();
     90     line += item_4;
     91     ui->lineEdit->setText(line);
     92 }
     93 
     94 void Widget::item5() //5
     95 {
     96     item_5 = ui->pushButton5->text();
     97     line += item_5;
     98     ui->lineEdit->setText(line);
     99 }
    100 
    101 void Widget::item6() //6
    102 {
    103     item_6 = ui->pushButton6->text();
    104     line += item_6;
    105     ui->lineEdit->setText(line);
    106 }
    107 
    108 void Widget::item7() //7
    109 {
    110     item_7 = ui->pushButton7->text();
    111     line += item_7;
    112     ui->lineEdit->setText(line);
    113 }
    114 
    115 void Widget::item8() //8
    116 {
    117     item_8 = ui->pushButton8->text();
    118     line += item_8;
    119     ui->lineEdit->setText(line);
    120 }
    121 
    122 void Widget::item9() //9
    123 {
    124     item_9 = ui->pushButton9->text();
    125     line += item_9;
    126     ui->lineEdit->setText(line);
    127 }
    128 
    129 
    130 void Widget::point() //小数点
    131 {
    132     if(flag1 == 0) //没有按等于号按键,说明没有进行运算,所以显示第一次输入的字符串
    133     {
    134         line +=".";
    135         ui->lineEdit->setText(line);
    136     }
    137 
    138     if(flag1 == 1) //按了等于号按键,这时候要显示后面一次输入的字符串
    139     {
    140         line  = ui->lineEdit->text();
    141         line += ".";
    142         ui->lineEdit->setText(line);
    143         flag1 = 0;
    144     }
    145 }
    146 
    147 
    148 void Widget::delet() //尾剔除
    149 {
    150     line = ui->lineEdit->text(); //获取输入条中的字符
    151     line.chop(1); //倒位删除,即是从字符串后面开始按位删除
    152     ui->lineEdit->setText(line);
    153 }
    154 
    155 void Widget::cancel() //重新置零
    156 {
    157    line.clear();
    158    temp1.clear();
    159    temp2.clear();
    160    sum = 0;
    161    flag = 0;
    162    flag1 = 0;
    163    flag3 = 0;
    164    flag4 =0;
    165    flag5 = 0;
    166    ui->lineEdit->setText(line);//输出0
    167 }
    168 
    169 void Widget::add() //相加
    170 {
    171     flag = 1;
    172     temp1 = ui->lineEdit->text(); //获取前面输入的字符,并临时保存起来
    173     line.clear(); //清空字符数组
    174     ui->lineEdit->setText(line);//显示清空状态
    175 }
    176 
    177 void Widget::sub() //相减
    178 {
    179     flag3 = 1;//按了加号按键就改变状态
    180     temp1 = ui->lineEdit->text(); //获取前面输入的字符,并临时保存起来
    181     line.clear(); //清空字符数组
    182     ui->lineEdit->setText(line);//显示清空状态
    183 }
    184 
    185 void Widget::div()//除法
    186 {
    187     flag4 = 1;//按了加号按键就改变状态
    188     temp1 = ui->lineEdit->text(); //获取前面输入的字符,并临时保存起来
    189     line.clear(); //清空字符数组
    190     ui->lineEdit->setText(line);//显示清空状态
    191 }
    192 
    193 
    194 void Widget::mul()//乘法
    195 {
    196     flag5 = 1;//按了加号按键就改变状态
    197     temp1 = ui->lineEdit->text(); //获取前面输入的字符,并临时保存起来
    198     line.clear(); //清空字符数组
    199     ui->lineEdit->setText(line);//显示清空状态
    200 }
    201 
    202 void Widget::equal() //得出结果
    203 {
    204     flag1 = 1; //按一次等于号就改变状态
    205     if(flag == 1) //加法
    206     {
    207         temp2 = ui->lineEdit->text();
    208         line.clear(); //清空字符串
    209         sum = temp1.toDouble() + temp2.toDouble(); //将字符转换成浮点型
    210         ui->lineEdit->setText(QString::number(sum)); //将浮点型转换成字符
    211         flag = 0; //重新让标志位置零,等待下一次的加法进行
    212     }
    213 
    214     else if(flag3 == 1) //减法
    215     {
    216         temp2 = ui->lineEdit->text();
    217         line.clear(); //清空字符串
    218         ui->lineEdit->setText(line);
    219         sum = temp1.toDouble() - temp2.toDouble(); //将字符转换成浮点型
    220 
    221         if(sum == 0) //等于0
    222         {
    223             ui->lineEdit->setText("0");
    224         }
    225         ui->lineEdit->setText(QString::number(sum)); //将浮点型转换成字符
    226             // qDebug()<<sum;
    227         flag3 = 0; //重新让标志位置零,等待下一次的减法进行
    228     }
    229 
    230     else if(flag4 == 1) //除法
    231     {
    232         temp2 = ui->lineEdit->text();
    233         line.clear(); //清空字符串
    234         sum = temp1.toDouble() / temp2.toDouble(); //将字符转换成浮点型
    235         if(temp2 == "0") //分母等于0
    236         {
    237             ui->lineEdit->setText("0");
    238         }
    239         ui->lineEdit->setText(QString::number(sum)); //将浮点型转换成字符
    240         flag4 = 0; //重新让标志位置零,等待下一次的除法进行
    241     }
    242 
    243    else if(flag5 == 1) //乘法
    244     {
    245         temp2 = ui->lineEdit->text();
    246         line.clear(); //清空字符串
    247         sum = temp1.toDouble() * temp2.toDouble(); //将字符转换成浮点型
    248         ui->lineEdit->setText(QString::number(sum)); //将浮点型转换成字符
    249         flag5 = 0; //重新让标志位置零,等待下一次的乘法进行
    250     }
    251 
    252 }

    效果图如下:

    如果有什么建议或者疑惑的地方可以私聊我。

  • 相关阅读:
    Web中路径问题
    post请求乱码
    阶段5 3.微服务项目【学成在线】_day04 页面静态化_10-freemarker静态化测试-基于模板文件静态化
    阶段5 3.微服务项目【学成在线】_day04 页面静态化_09-freemarker基础-内建函数
    阶段5 3.微服务项目【学成在线】_day04 页面静态化_08-freemarker基础-空值处理
    阶段5 3.微服务项目【学成在线】_day04 页面静态化_07-freemarker基础-if指令
    阶段5 3.微服务项目【学成在线】_day04 页面静态化_06-freemarker基础-遍历map数据
    阶段5 3.微服务项目【学成在线】_day04 页面静态化_05-freemarker基础-List指令
    阶段5 3.微服务项目【学成在线】_day04 页面静态化_04-freemarker基础-基础语法种类
    阶段5 3.微服务项目【学成在线】_day04 页面静态化_03-freemarker测试环境搭建
  • 原文地址:https://www.cnblogs.com/wurenzhong/p/7821110.html
Copyright © 2011-2022 走看看