Как преобразовать значение QLineEdit в двойной формат и использовать его для вычислений в простом калькуляторе ⇐ C++
Как преобразовать значение QLineEdit в двойной формат и использовать его для вычислений в простом калькуляторе
Я делаю модифицированную версию калькулятора для изучения языка. У меня был оригинальный калькулятор, я изменил его матрицу (убрав оттуда числа и оставив только знаки действий) и добавил два виджета QLineEdit, содержимым которых будет сложение, умножение и т.д. в зависимости от выбранного действия. После этого я определил виджеты и их значения в заголовочном файле и попытался изменить класс «вычислить». Моя цель состояла в том, чтобы заставить его принимать значения строк как термины, а не числа, выбранные нажатием кнопки.
Файл C++ my_calculator.cpp
#include #include #include #include #include #include "my_calculator.h" #include Калькулятор::Calculator(QWidget* pwtg/*= 0*/): QWidget(pwtg) { m_plcd = новый QLCDNumber (12); m_plcd->setSegmentStyle(QLCDNumber::Flat); m_plcd->setMinimumSize(150,50); QChar aButtons[1][6] = {'/', '*', '-', '.', '=', '+'}; //Раскладка матрицы изменена QGridLayout* ptopLayout = новый QGridLayout; //Добавлены текстовые ячейки QLineEdit* num1=новый QLineEdit(); QLineEdit* num2=новый QLineEdit(); Значение1 = число1->текст(); Значение2 = число2->текст(); ptopLayout->addWidget(num1, 0,0,1,4); ptopLayout->addWidget(num2, 1,0,2,4); //конец добавленных текстовых ячеек ptopLayout->addWidget(m_plcd, 0, 4, 2, 8); ptopLayout->addWidget(createButton("CE"),2,7); для (int i=0; isetMinimumSize(40, 40); Connect(pcmd, SIGNAL(clicked()), SLOT(slotButtonClicked())); вернуть ПКМД; } //Расчет исходного блока /*void Калькулятор::calculate() { двойной dOperand2 = m_stk.pop().toDouble(); QString strOperation = m_stk.pop(); двойной dOperand1 = m_stk.pop().toDouble(); двойной dResult = 0; если (strOperation == "+") { dResult = dOperand1 + dOperand2; } если (strOperation == "-") { dResult = dOperand1 - dOperand2; } если (strOperation == "/") { dResult = dOperand1 / dOperand2; } если (strOperation == "*") { dResult = dOperand1 * dOperand2; } m_plcd-> display (dResult); }*/ void Калькулятор::calculate() { двойной dOperand2 =Value2.toDouble(); QString strOperation = m_stk.pop(); двойной dOperand1 =Value1.toDouble(); двойной dResult = 0; если (strOperation == "+") { dResult = dOperand1 + dOperand2; } если (strOperation == "-") { dResult = dOperand1 - dOperand2; } если (strOperation == "/") { dResult = dOperand1 / dOperand2; } если (strOperation == "*") { dResult = dOperand1 * dOperand2; } m_plcd-> display (dResult); } void Calculator::slotButtonClicked() { QString str = ((QPushButton*)sender())->text(); если (str == "CE") { m_stk.clear(); m_strDisplay = ""; m_plcd->display("0"); возвращаться; } if (str.contains(QRegExp("[0-9]"))) { m_strDisplay += ул; m_plcd->display(m_strDisplay.toDouble()); } иначе если (str == ".") { m_strDisplay += ул; m_plcd-> display (m_strDisplay); } еще { если (m_stk.count() >= 2) { m_stk.push(QString().setNum(m_plcd->value())); вычислить(); m_stk.clear(); m_stk.push(QString().setNum(m_plcd->value())); если (str != "=") { m_stk.push(стр); } } еще { m_stk.push(QString().setNum(m_plcd->value())); m_stk.push(стр); m_strDisplay = ""; m_plcd->display("0"); } } } Файл C++ my_calculator.h
#ifndef _My_Calculator_h_ #define _My_Calculator_h_ #include #include #include класс QLCDNumber; класс QPushButton; Калькулятор класса: public QWidget { Q_OBJECT частный: QLCDNumber* m_plcd; QStack m_stk; QString m_strDisplay; QLineEdit *num1; QLineEdit *num2; публика: Калькулятор (QWidget* pwtg=0); QPushButton* createButton(const QString& str); недействительный расчет ( ); QString Значение1; QString Значение2; общественные слоты: недействительный slotButtonClicked(); }; #endif //_Мой_Калькулятор_h_ Файл main.cpp
#include #include "my_calculator.h" #include #include #include int main(int argc, char** argv) { Приложение QApplication (argc, argv); Калькулятор калькулятор; Calculator.setWindowTitle("Калькулятор"); калькулятор.resize(230 200); калькулятор.шоу(); вернуть приложение.exec(); } Моя первоначальная идея не сработала, и теперь я не знаю, как изменить ситуацию. Как я могу это изменить? Веб запускается, появляется окно с калькулятором, я могу складывать числа, записывая их в строки, но знаки действий не выполняют вычисления над содержимым строк.
Я делаю модифицированную версию калькулятора для изучения языка. У меня был оригинальный калькулятор, я изменил его матрицу (убрав оттуда числа и оставив только знаки действий) и добавил два виджета QLineEdit, содержимым которых будет сложение, умножение и т.д. в зависимости от выбранного действия. После этого я определил виджеты и их значения в заголовочном файле и попытался изменить класс «вычислить». Моя цель состояла в том, чтобы заставить его принимать значения строк как термины, а не числа, выбранные нажатием кнопки.
Файл C++ my_calculator.cpp
#include #include #include #include #include #include "my_calculator.h" #include Калькулятор::Calculator(QWidget* pwtg/*= 0*/): QWidget(pwtg) { m_plcd = новый QLCDNumber (12); m_plcd->setSegmentStyle(QLCDNumber::Flat); m_plcd->setMinimumSize(150,50); QChar aButtons[1][6] = {'/', '*', '-', '.', '=', '+'}; //Раскладка матрицы изменена QGridLayout* ptopLayout = новый QGridLayout; //Добавлены текстовые ячейки QLineEdit* num1=новый QLineEdit(); QLineEdit* num2=новый QLineEdit(); Значение1 = число1->текст(); Значение2 = число2->текст(); ptopLayout->addWidget(num1, 0,0,1,4); ptopLayout->addWidget(num2, 1,0,2,4); //конец добавленных текстовых ячеек ptopLayout->addWidget(m_plcd, 0, 4, 2, 8); ptopLayout->addWidget(createButton("CE"),2,7); для (int i=0; isetMinimumSize(40, 40); Connect(pcmd, SIGNAL(clicked()), SLOT(slotButtonClicked())); вернуть ПКМД; } //Расчет исходного блока /*void Калькулятор::calculate() { двойной dOperand2 = m_stk.pop().toDouble(); QString strOperation = m_stk.pop(); двойной dOperand1 = m_stk.pop().toDouble(); двойной dResult = 0; если (strOperation == "+") { dResult = dOperand1 + dOperand2; } если (strOperation == "-") { dResult = dOperand1 - dOperand2; } если (strOperation == "/") { dResult = dOperand1 / dOperand2; } если (strOperation == "*") { dResult = dOperand1 * dOperand2; } m_plcd-> display (dResult); }*/ void Калькулятор::calculate() { двойной dOperand2 =Value2.toDouble(); QString strOperation = m_stk.pop(); двойной dOperand1 =Value1.toDouble(); двойной dResult = 0; если (strOperation == "+") { dResult = dOperand1 + dOperand2; } если (strOperation == "-") { dResult = dOperand1 - dOperand2; } если (strOperation == "/") { dResult = dOperand1 / dOperand2; } если (strOperation == "*") { dResult = dOperand1 * dOperand2; } m_plcd-> display (dResult); } void Calculator::slotButtonClicked() { QString str = ((QPushButton*)sender())->text(); если (str == "CE") { m_stk.clear(); m_strDisplay = ""; m_plcd->display("0"); возвращаться; } if (str.contains(QRegExp("[0-9]"))) { m_strDisplay += ул; m_plcd->display(m_strDisplay.toDouble()); } иначе если (str == ".") { m_strDisplay += ул; m_plcd-> display (m_strDisplay); } еще { если (m_stk.count() >= 2) { m_stk.push(QString().setNum(m_plcd->value())); вычислить(); m_stk.clear(); m_stk.push(QString().setNum(m_plcd->value())); если (str != "=") { m_stk.push(стр); } } еще { m_stk.push(QString().setNum(m_plcd->value())); m_stk.push(стр); m_strDisplay = ""; m_plcd->display("0"); } } } Файл C++ my_calculator.h
#ifndef _My_Calculator_h_ #define _My_Calculator_h_ #include #include #include класс QLCDNumber; класс QPushButton; Калькулятор класса: public QWidget { Q_OBJECT частный: QLCDNumber* m_plcd; QStack m_stk; QString m_strDisplay; QLineEdit *num1; QLineEdit *num2; публика: Калькулятор (QWidget* pwtg=0); QPushButton* createButton(const QString& str); недействительный расчет ( ); QString Значение1; QString Значение2; общественные слоты: недействительный slotButtonClicked(); }; #endif //_Мой_Калькулятор_h_ Файл main.cpp
#include #include "my_calculator.h" #include #include #include int main(int argc, char** argv) { Приложение QApplication (argc, argv); Калькулятор калькулятор; Calculator.setWindowTitle("Калькулятор"); калькулятор.resize(230 200); калькулятор.шоу(); вернуть приложение.exec(); } Моя первоначальная идея не сработала, и теперь я не знаю, как изменить ситуацию. Как я могу это изменить? Веб запускается, появляется окно с калькулятором, я могу складывать числа, записывая их в строки, но знаки действий не выполняют вычисления над содержимым строк.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Невозможно использовать «0,3», но можно использовать «0,3» в простом калькуляторе Java.
Anonymous » » в форуме JAVA - 0 Ответы
- 19 Просмотры
-
Последнее сообщение Anonymous
-