示例#1
0
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));
    }

}
示例#2
0
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);
    }
}
示例#3
0
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;
}