Skip to content

Repository files navigation

Калькулятор на Qt5

Калькулятор аналогичный калькулятору Windows.

  • Цифры: 0,1,2...9
  • Арифметические операции: + - * /

Состояние калькулятора:

enum CalcStates {
ENTER_NUMBER, // Ввели какие-то цифры и// продолжаем вводить числоOPERATION, // Только что нажали "+", "-" или другую// бинарную операцию
};

CalcStates.h

Когда нажимаем на любую кнопку с цифрой вызывается этот слот:

switch (calcState) {
caseOPERATION: // Если сейчас операцияclearDisplay(); // Очищаем дисплейbreak;
default:
break;
}
// UTF-8
QString s = ui->display->text();
// (QPushButton *)QObject::sender() -// отправитель текущего сигнала
QPushButton* digitButton =
(QPushButton*)QObject::sender();
if(digitButton == NULL)
return;
QChar zero('0');
// Удаляем из s все лидирующие нулиif(s.at(0) == zero)
s.remove(0, 1);
// Дописываем новую цифру на экран
s += digitButton->text();
ui->display->setText(s);

Когда меняется текст на дисплее. Изменяем состояние всех кнопок. Можно нажимать ".", только если на дисплее точек ещё нет

voidMainWindow::on_display_textChanged(const QString& arg1) {
int points = ui->display->text().count(".");
ui->PointButton->setEnabled(points == 0);
}

Выполнение операции: Получаем компонент отправивший сигнал

 QPushButton* operButton =
dynamic_cast<QPushButton*>
(QObject::sender());

Выполняем операцию над содержимым экрана и памятью

double a = ui->memory->text().toDouble();
double b = ui->display->text().toDouble();
double res = 0;
QString nextOp = operButton->text();
switch (ui->operation->text().at(0).toLatin1()) {
case'+':
res = a + b;
break;
case'-':
res = a - b;
break;
case'*':
res = a * b;
break;
case'/':
res = a / b;
break;
case'=':
res = b;
nextOp = QChar(NO_OPERATION);
break;
caseNO_OPERATION:
res = b;
break;
default:
thrownewQString("Unknown operation: " + operButton->text());
}
// Запоминаем нажатую кнопку - следующую операциюif(nextOp == QStringLiteral("="))
ui->operation->setText(QChar(NO_OPERATION));
else
ui->operation->setText(nextOp);
QString strTemplate("%1");
QString strRes = strTemplate.arg(res);
// Показываем значение на экране
ui->display->setText(strRes);
ui->memory->setText(strRes); // + " +");setState(OPERATION);

mainwindow.cpp

About

Калькулятор на Qt5

Resources

Stars

0 stars

Watchers

9 watching

Forks

Releases

Packages

Contributors

Languages