Создание методов для кнопок
Создадим методы для всех кнопок, включая те, которые не будут реализованы в этом уроке. Для кнопок «равно» и арифметических операций (+, -, *, /) создадим слоты, связав сигнал clicked() с соответствующими методами. В файле mainwindow.cpp добавим объявления методов:
void on_pushButton_clicked(); // Кнопка 0
void on_pushButton_2_clicked(); // Кнопка 1
// ... и т.д. для других кнопок
void on_pushButtonPlus_clicked(); // Кнопка '+'
void on_pushButtonMinus_clicked(); // Кнопка '-'
void on_pushButtonMultiply_clicked(); // Кнопка '*'
void on_pushButtonDivide_clicked(); // Кнопка '/'
void on_pushButtonEquals_clicked(); // Кнопка '='
Реализация методов
Реализуем логику работы методов. В методе on_pushButtonPlus_clicked() (и аналогично для других арифметических операций) будем использовать свойство setChecked(true) для отслеживания нажатия. Это позволит определить выбранную операцию в методе on_pushButtonEquals_clicked().
// Пример для кнопки '+'
void MainWindow::on_pushButtonPlus_clicked()
{
ui->pushButtonPlus->setChecked(true);
// ... остальная логика
}
Установим свойство checkable в true для кнопок арифметических операций в дизайнере Qt Creator.
Добавим глобальную переменную для хранения первого числа:
double num;
В методе обработки нажатия на арифметическую операцию сохраним первое число в переменную num:
num = ui->resultShow->text().toDouble();
Метод для кнопки «=»
В методе on_pushButtonEquals_clicked() используем условные операторы для выполнения выбранной операции. Создадим переменные:
double numSec;
QString str;
Получим второе число и выполним соответствующую операцию на основе значения setChecked():
numSec = ui->resultShow->text().toDouble();
if (ui->pushButtonPlus->isChecked()) {
// сложение num = num + numSec;
} else if (ui->pushButtonMinus->isChecked()) {
// вычитание num = num - numSec;
} else if (ui->pushButtonMultiply->isChecked()) {
// умножение num = num * numSec;
} else if (ui->pushButtonDivide->isChecked()) {
// деление с проверкой на деление на ноль
if (numSec == 0) {
ui->resultShow->setText("Деление на ноль!");
} else {
num = num / numSec;
}
}
ui->resultShow->setText(QString::number(num)); // Вывод результата
// Сброс флагов isChecked() для кнопок операций
ui->pushButtonPlus->setChecked(false);
ui->pushButtonMinus->setChecked(false);
ui->pushButtonMultiply->setChecked(false);
ui->pushButtonDivide->setChecked(false);
Очистка поля ввода
После нажатия на кнопку арифметической операции очистим поле вывода: Эта часть уже включена в метод on_pushButtonEquals_clicked().
Калькулятор теперь выполняет основные арифметические операции. В следующем уроке добавим кнопку очистки.