Первое простое утверждение if в Qt: Сравнение двух символов

У меня проблемы с моей первой программой Qt (должен быть простой калькулятор). Я хотел бы рассчитывать каждый раз, когда на дисплее калькулятора уже есть оператор (lineEditDisplay), и я снова нажимаю оператор.
Моя проблема в том, что он распознает «+», но не «-» или «*», и я не знаю почему.

Например, если я нажимаю 4, то -, затем 2, на дисплее отображается 4-2, но теперь, если я нажимаю кнопку «+», я получаю 6+, а не 2+. Таким образом, кажется, что он идет в первом операторе if и вычисляет firstNumber + secondNumber.

Вот щелкаемый слот для кнопки добавления:

void Calculator::on_pushButtonAddition_clicked()
{
QString inLineEditDisplay=ui->lineEditDisplay->text(); //Get whats in display
//Loop through display string
for(int i=0; i<inLineEditDisplay.length(); i++)
{
//Check if there is already a operator -> if yes then calculate first so
//we can add a new operator; first check for +
if(inLineEditDisplay[i]=='+')
{
//Get the two numbers; in front of and behind the operator
QString firstPart=inLineEditDisplay.left(i);
QString secondPart=inLineEditDisplay.right(inLineEditDisplay.length()-i);
//Change from QString to int, so we can calculate with
int firstPartAsInt=firstPart.toInt();
int secondPartAsInt=secondPart.toInt();
inLineEditDisplay=QString::number(firstPartAsInt+secondPartAsInt);
}
//Now check for -
if(inLineEditDisplay[i]=='-')
{
//Get the two numbers; in front of and behind the operator
QString firstPart=inLineEditDisplay.left(i);
QString secondPart=inLineEditDisplay.right(inLineEditDisplay.length()-i);
//Change from QString to int, so we can calculate with
int firstPartAsInt=firstPart.toInt();
int secondPartAsInt=secondPart.toInt();
inLineEditDisplay=QString::number(firstPartAsInt-secondPartAsInt);
}
//Now check for *
if(inLineEditDisplay[i]=='*')
{
//Get the two numbers; in front of and behind the operator
QString firstPart=inLineEditDisplay.left(i);
QString secondPart=inLineEditDisplay.right(inLineEditDisplay.length()-i);
//Change from QString to int, so we can calculate with
int firstPartAsInt=firstPart.toInt();
int secondPartAsInt=secondPart.toInt();
inLineEditDisplay=QString::number(firstPartAsInt*secondPartAsInt);
}
//Now check for /
if(inLineEditDisplay[i]=='/')
{
//Get the two numbers; in front of and behind the operator
QString firstPart=inLineEditDisplay.left(i);
QString secondPart=inLineEditDisplay.right(inLineEditDisplay.length()-i);
//Change from QString to int, so we can calculate with
int firstPartAsInt=firstPart.toInt();
int secondPartAsInt=secondPart.toInt();
inLineEditDisplay=QString::number(firstPartAsInt/secondPartAsInt);
}
}
inLineEditDisplay.append('+');
ui->lineEditDisplay->setText(inLineEditDisplay);
}

Я проверил это также с

if(inLineEditDisplay[i]==QLatin1Char('+'))

но это ничего не изменило (не вижу другого поведения)

@https://stackoverflow.com/users/2422324/user2422324

calculator.cpp -> http://pastebin.com/1bsUgg3Y

calculator.h -> http://pastebin.com/F0kbkx4g

main.cpp -> http://pastebin.com/keCu6Gcr

calculator.ui -> http://pastebin.com/nTEauYAH

0

Решение

Функция Calculator::on_pushButtonAddition_clicked() вызывается только если + кнопка срабатывает. Вы уверены, что связали эту функцию со всеми другими кнопками оператора?

Должны быть функции лайк (Я не знаю, так ли они называются именно так)

Calculator::on_pushButtonSubtraction_clicked() Calculator::on_pushButtonDivision_clicked() Calculator::on_pushButtonMultiplication_clicked()

0

Другие решения

Ну, это был глупый …

QString.length() возвращает количество элементов и я зацикливаюсь i=0; i<QString.length; i++; пока я не нашел оператора.

Теперь левая сторона оператора QString[0;i[ или же QString.left(i) и правая сторона (где была ошибка) QString]i; QString.length()] или же QString.right(QString.length()-(i+1)) и не QString.length().right.length()-i

0

По вопросам рекламы [email protected]