我需要使用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();