Home Article Qt实现带()简易计算器

Qt实现带()简易计算器

Release time:2020-08-20 16:26:47 Author:一蓑烟雨 Reading volume:267

widget.h
#define WIDGET_H

#include <QWidget>


QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE


class Widget : public QWidget
{
    Q_OBJECT


public:
    Widget(QWidget *parent = nullptr);
    ~Widget();


private slots:
    void on_pushButton_1_clicked();
    void on_pushButton_2_clicked();
    void on_pushButton_3_clicked();
    void on_pushButton_4_clicked();
    void on_pushButton_5_clicked();
    void on_pushButton_6_clicked();
    void on_pushButton_7_clicked();
    void on_pushButton_8_clicked();
    void on_pushButton_9_clicked();
    void on_pushButton_0_clicked();
    void on_pushButton_add_clicked();
    void on_pushButton_sub_clicked();
    void on_pushButton_mul_clicked();
    void on_pushButton_div_clicked();
    void on_pushButton_left_clicked();
    void on_pushButton_right_clicked();
    void on_pushButton_ce_clicked();
    void on_pushButton_del_clicked();
    void on_pushButton_eq_clicked();


private:
    Ui::Widget *ui;
    QString expression;
    int Priority(char ch);
};
#endif // WIDGET_H
main.cpp
#include "widget.h"
#include "string.h"
#include <QApplication>


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QString>
#include <QStack>
#include "cstdio"
#include "cstring"
#include "string.h"


Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);


    //this->resize(223,310);//设置整个窗口的大小可以改变大小及全屏
    this->setMinimumSize(223,310);//不可以改变大小
    this->setMaximumSize(223,310);
    // 设置窗体标题
    this->setWindowTitle(QString::fromLocal8Bit("计算器"));
    // 设置按键字体
     QFont t("仿宋",10);
     this->setFont(t);
    //设置文本框字体
    QFont f("仿宋",10);
    ui->lineEdit->setFont(f);
}


Widget::~Widget()
{
    delete ui;
}




void Widget::on_pushButton_1_clicked()
{
    expression += "1";
    ui->lineEdit->setText(expression);
}


void Widget::on_pushButton_2_clicked()
{
    expression += "2";
    ui->lineEdit->setText(expression);
}


void Widget::on_pushButton_3_clicked()
{
    expression += "3";
    ui->lineEdit->setText(expression);
}


void Widget::on_pushButton_4_clicked()
{
    expression += "4";
    ui->lineEdit->setText(expression);
}


void Widget::on_pushButton_5_clicked()
{
    expression += "5";
    ui->lineEdit->setText(expression);
}


void Widget::on_pushButton_6_clicked()
{
    expression += "6";
    ui->lineEdit->setText(expression);
}


void Widget::on_pushButton_7_clicked()
{
    expression += "7";
    ui->lineEdit->setText(expression);
}


void Widget::on_pushButton_8_clicked()
{
    expression += "8";
    ui->lineEdit->setText(expression);
}


void Widget::on_pushButton_9_clicked()
{
    expression += "9";
    ui->lineEdit->setText(expression);
}


void Widget::on_pushButton_0_clicked()
{
    expression += "0";
    ui->lineEdit->setText(expression);
}


void Widget::on_pushButton_add_clicked()
{
    expression += "+";
    ui->lineEdit->setText(expression);
}


void Widget::on_pushButton_sub_clicked()
{
    expression += "-";
    ui->lineEdit->setText(expression);
}


void Widget::on_pushButton_mul_clicked()
{
    expression += "*";
    ui->lineEdit->setText(expression);
}


void Widget::on_pushButton_div_clicked()
{
    expression += "/";
    ui->lineEdit->setText(expression);
}
void Widget::on_pushButton_left_clicked()
{
    expression += "(";
    ui->lineEdit->setText(expression);
}
void Widget::on_pushButton_right_clicked()
{
    expression += ")";
    ui->lineEdit->setText(expression);
}
void Widget::on_pushButton_ce_clicked()
{
    expression.clear();
    ui->lineEdit->clear();
}
void Widget::on_pushButton_del_clicked()
{
    expression.chop(1);
    ui->lineEdit->setText(expression);
}


int Widget:: Priority(char ch)
{
    switch(ch)
    {
        case '(':
            return 3;
        case '*':
        case '/':
            return 2;
        case '+':
        case '-':
            return 1;
        default:
            return 0;




    }


}
void Widget::on_pushButton_eq_clicked()
{
        char s[128]={0};
        QStack<int> num;
        QStack<char> opt;
        QByteArray ba;
        ba.append(expression);
        strcpy_s(s,ba.data());
        int num1,num2;
        int tmp = 0;
        char *sch = s;
        while ( *sch!= '' || opt.empty() != true)
        {
            if (*sch >= '0' && *sch <= '9')
            {
                tmp = tmp * 10 + *sch - '0';
                sch ++;
                if (*sch < '0' || *sch >'9')
                {
                    num.push(tmp);
                    tmp = 0;
                }
            }
            else
            {
                if (opt.empty() == true || opt.top() == '(' && *sch != ')' ||
                    Priority(*sch) > Priority(opt.top()))
                {
                    opt.push(*sch);
                    sch++;
                    continue;
                }
                if (opt.top() == '(' && *sch == ')')
                {
                    opt.pop();
                    sch++;
                    continue;
                }


                if ((*sch == '' && opt.empty() != true) || *sch == ')' && opt.top() != '(' ||
                    Priority(*sch) <= Priority(opt.top()))
                {
                    switch(opt.top())
                    {
                        case '+':
                            opt.pop();
                            num1 = num.top();
                            num.pop();
                            num2=num.top();
                            num.pop();
                            num.push(num1 + num2);
                            break;
                        case '-':
                            opt.pop();
                            num2 = num.top();
                            num.pop();
                            num1 = num.top();
                            num.pop();
                            num.push(num1- num2);
                            break;
                        case '*':
                            opt.pop();
                            num1 = num.top();
                            num.pop();
                            num2=num.top();
                            num.pop();
                            num.push(num1 * num2);
                            break;
                        case '/':
                            opt.pop();
                            num2 = num.top();
                            num.pop();
                            num1 = num.top();
                            num.pop();
                            num.push(num1/num2);
                            break;
                    }


                    continue;
                }
             }
        }


    ui->lineEdit->setText(QString::number(num.top()));
    expression.clear();
}



main.cpp
#include "string.h"
#include <QApplication>


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}
  
I want to comment

Search

classification

Leave a message
http://blog.rjxj513.com/index.php/
User login
You have not written any reviews yet!
You have commented!
Can only praise once!
You have a collection!