MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); ui->gridLayout->addWidget(ui->text, 1, 1, 1, 3); QPushButton *clearButton = new QPushButton("C"); ui->gridLayout->addWidget(clearButton, 1, 4); connect(clearButton, SIGNAL(clicked()), this, SLOT(clearButtonClicked())); QPushButton *equalButton = new QPushButton("="); ui->gridLayout->addWidget(equalButton, 5, 3); connect(equalButton, SIGNAL(clicked()), this, SLOT(equalButtonClicked())); QPushButton *pointButton = new QPushButton("."); ui->gridLayout->addWidget(pointButton, 5, 2); connect(pointButton, SIGNAL(clicked()), this, SLOT(pointButtonClicked())); ///Making signals for operations QSignalMapper *operationMapper = new QSignalMapper; connect(operationMapper, SIGNAL(mapped(const QString &)), this, SLOT(operationButtonClicked(const QString &))); for (int i = 0; i < 4; i++) { QString *operation = new QString; if (i == 0) operation[0] = '+'; else if (i == 1) operation[0] = '-'; else if (i == 2) operation[0] = '*'; else if (i == 3) operation[0] = '/'; QPushButton *newOperationButton = new QPushButton(*operation); ui->gridLayout->addWidget(newOperationButton, i + 2, 4); connect(newOperationButton, SIGNAL(clicked()), operationMapper, SLOT(map())); operationMapper->setMapping(newOperationButton, *operation); } ///Making signals for digits QSignalMapper *digitMapper = new QSignalMapper; connect(digitMapper, SIGNAL(mapped(const QString &)), this, SLOT(digitButtonClicked(const QString &))); for (int i = 0; i < 10; i++) { QPushButton *newDigitButton = new QPushButton(QString::number(i)); if (i == 0) ui->gridLayout->addWidget(newDigitButton, 5, 1); else { int row = 4 - ((i - 1) / 3); int column = ((i - 1) % 3) + 1; ui->gridLayout->addWidget(newDigitButton, row, column); } connect(newDigitButton, SIGNAL(clicked()), digitMapper, SLOT(map())); digitMapper->setMapping(newDigitButton, QString::number(i)); } }
void MainWindow::operationButtonClicked(const QString &operation) { if (calc.state == firstNumberInt || calc.state == firstNumberFraction || calc.state == mathOperation || calc.state == showAnswer) { calc.addOperation(operation); } else if (calc.state == secondNumberInt || calc.state == secondNumberFraction) { equalButtonClicked(); if (ui->text->text() != "ERROR") calc.addOperation(operation); } }
QLayout *Calculator::setupOperatorButtons() { QPushButton *buttonDiv = new QPushButton(operatorSymbolDiv); QPushButton *buttonMul = new QPushButton(operatorSymbolMul); QPushButton *buttonSub = new QPushButton(operatorSymbolSub); QPushButton *buttonAdd = new QPushButton(operatorSymbolAdd); QPushButton *buttonEqual = new QPushButton("="); buttonDiv->setObjectName("buttonDiv"); buttonMul->setObjectName("buttonMul"); buttonSub->setObjectName("buttonSub"); buttonAdd->setObjectName("buttonAdd"); buttonEqual->setObjectName("buttonEqual"); QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(buttonDiv); layout->addWidget(buttonMul); layout->addWidget(buttonSub); layout->addWidget(buttonAdd); layout->addWidget(buttonEqual); connect(buttonDiv,SIGNAL(clicked()),this,SLOT(operatorButtonClicked())); connect(buttonMul,SIGNAL(clicked()),this,SLOT(operatorButtonClicked())); connect(buttonSub,SIGNAL(clicked()),this,SLOT(operatorButtonClicked())); connect(buttonAdd,SIGNAL(clicked()),this,SLOT(operatorButtonClicked())); connect(buttonEqual,SIGNAL(clicked()),this,SLOT(equalButtonClicked())); m_operatorMap[buttonDiv] = &Calculator::calculateDiv; m_operatorMap[buttonMul] = &Calculator::calculateMul; m_operatorMap[buttonSub] = &Calculator::calculateSub; m_operatorMap[buttonAdd] = &Calculator::calculateAdd; m_operatorSymbol[buttonDiv] = operatorSymbolDiv; m_operatorSymbol[buttonMul] = operatorSymbolMul; m_operatorSymbol[buttonSub] = operatorSymbolSub; m_operatorSymbol[buttonAdd] = operatorSymbolAdd; return layout; }