使用qt的RPN图形计算器

时间:2019-11-24 05:13:56

标签: c++ qt rpn

我需要使用rpn堆栈并使用qt Creator开发calculador应用程序。我有问题要显示堆栈并解决方程式。该数字必须显示在行编辑空间中,单击Enter按钮后,该数字将转到文本编辑和堆栈。

我刚刚开发了数字和操作信号,现在我需要将数字堆叠起来并显示出来。

#include "calculadora.h"
#include "ui_calculadora.h"

int i,j;
int calcVal = 0;
//define operação selecionada
bool divpres = false;
bool multpres = false;
bool addpres = false;
bool subpres = false;

bool npress = false;
bool opress = false;

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

    //Coloca 0 no line edit
    ui -> edit -> setText(QString::number(calcVal));

    //Coloca todos botões numéricos em um
    QPushButton *numButton[10];

    for(i = 0; i < 10; ++i)
    {
        QString butName = "but_" + QString::number(i);
        //Pega os botões pelo nome e adiciona na string
        numButton[i] = Calculadora::findChild<QPushButton *>(butName);
        //Conecta sinais botões - when realeased chama a func. numpressed
        connect(numButton[i], SIGNAL(released()), this, SLOT(NumPressed()));

    }

    //Conecta sinais dos operadores aos slots
    connect(ui -> op_add,  SIGNAL(released()), this, SLOT(OpsPressed()));
    connect(ui -> op_sub,  SIGNAL(released()), this, SLOT(OpsPressed()));
    connect(ui -> op_mult, SIGNAL(released()), this, SLOT(OpsPressed()));
    connect(ui -> op_div,  SIGNAL(released()), this, SLOT(OpsPressed()));

    connect(ui -> enterButton, SIGNAL(released()), this, SLOT(EnterButtonPressed()));

}

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


void Calculadora::NumPressed()
{
    npress = true;
    //sender retorna um ponteiro ao botão pressionado
    QPushButton *button = (QPushButton *)sender();
    QString butVal = button -> text();
    QString editVal = ui -> edit -> text();

    if ((editVal.toInt() == 00))
    {
        calcVal = butVal.toInt(); // --TRANSFORMA VARIAVEL EM INT

        ui -> edit -> setText(butVal);
    }
    else
    {
        QString newval = editVal + butVal;
        int operando = newval.toInt(); // operando - 1 operandoO
        ui -> edit -> setText(QString::number(operando, 'g', 16));//Coloca operando no edit
    }
}

void Calculadora::OpsPressed()
{
    opress = true;
    //Cancela operações anteriores
    divpres  = false;
    multpres = false;
    addpres  = false;
    subpres  = false;

    //sender retorna ponteiro para botão pressionado
    QPushButton *button = (QPushButton *)sender();

    //Identifica a operação selecionada
    QString butVal = button -> text();
    ui -> edit -> setText(butVal);

    if (QString::compare(butVal, "/" , Qt::CaseInsensitive) == 0)
    {
        divpres = true;
    }
    else if (QString::compare(butVal, "X" , Qt::CaseInsensitive) == 0)
    {
        multpres = true;
    }
    else if (QString::compare(butVal, "+" , Qt::CaseInsensitive) == 0)
    {
        addpres = true;
    }
    else if (QString::compare(butVal, "-" , Qt::CaseInsensitive) == 0)
    {
        subpres = true;
    }
}

void Calculadora::EnterButtonPressed()
{
    //Ler numero edit e passar para display
     QString editVal = ui -> edit -> text();
     int operando = editVal.toInt();

0 个答案:

没有答案