/
dmitriy.grischenkov
/
calcstc
Обзор
Документация
Войти
/
dmitriy.grischenkov
/
calcstc
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/calculatorcore.cpp
104 строки
3 KB
Dmitriy Grischenkov
first load
01 авг 2026, 21:35
01 авг 2026, 21:35
166b1b5
Код
Авторство
О чём код?
#include "calculatorcore.h" #include "utils.h" CalculatorCore::CalculatorCore(QObject *parent) : QObject(parent) { connect(&m_worker, &Worker::taskReady, this, &CalculatorCore::onTaskReady, Qt::QueuedConnection); connect(this, &CalculatorCore::useExternalChanged, this, &CalculatorCore::onUseExternal, Qt::QueuedConnection); m_worker.start(); emit resultListChanged(); } CalculatorCore::~CalculatorCore() { m_worker.stop(); } void CalculatorCore::processButton(QString const& type, QString const& func, QString const& placeHolder) { const auto operationVal = ConvertStringToEnum<CalcEnum::Operation>(type); switch (operationVal) { case CalcEnum::Opr: addOperator(func); break; case CalcEnum::Val: addEnteredValue(*func.begin()); break; case CalcEnum::None:break; } } void CalculatorCore::addOperator(QString const& op) { if (m_LastOperation != CalcEnum::Opr && m_LastOperation != CalcEnum::Val) { return; } if (m_LastOperation == CalcEnum::Opr) { m_oneTask.m_operandOpr.pop_back(); m_EnteredValue.chop(1); } if (m_LastOperation == CalcEnum::Val) { m_oneTask.m_operandVal.push_back(m_UnsavedValue.toDouble()); m_EnteredValue.append(m_UnsavedValue); m_UnsavedValue.clear(); m_UnsavedValue_hasDot = false; } const auto operatorVal = ConvertStringToEnum<CalcEnum::Operator>(op); m_oneTask.m_operandOpr.push_back(operatorVal); switch (operatorVal) { case CalcEnum::Plus: m_EnteredValue.append("+"); break; case CalcEnum::Minus: m_EnteredValue.append("-"); break; case CalcEnum::Multiply: m_EnteredValue.append("x"); break; case CalcEnum::Divide: m_EnteredValue.append("÷"); break; case CalcEnum::Equal: m_EnteredValue.append("="); break; } m_LastOperation = CalcEnum::Opr; if (operatorVal == CalcEnum::Equal) { m_oneTask.m_operandStr = m_EnteredValue; m_oneTask.m_delaySec = m_delaySec; m_oneTask.m_useExternal = m_useExternal; Worker::m_reqQueue.push(m_oneTask); m_oneTask.reset(); m_EnteredValue.clear(); m_UnsavedValue.clear(); m_UnsavedValue_hasDot = false; m_LastOperation = CalcEnum::None; } emit resultListChanged(); emit unsavedValueChanged(); emit enteredValueChanged(); } void CalculatorCore::addEnteredValue(QChar const& value) { if (m_UnsavedValue.size() == 1 && m_UnsavedValue[0] == '0' && value != '.' ) { return; } if (value == '.') { if(m_UnsavedValue_hasDot) { return; } else { m_UnsavedValue_hasDot = true; }; } m_LastOperation = CalcEnum::Val; m_UnsavedValue += value; emit unsavedValueChanged(); }