У меня проблемы с моей первой программой 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
Функция Calculator::on_pushButtonAddition_clicked()
вызывается только если +
кнопка срабатывает. Вы уверены, что связали эту функцию со всеми другими кнопками оператора?
Должны быть функции лайк (Я не знаю, так ли они называются именно так)
Calculator::on_pushButtonSubtraction_clicked()
Calculator::on_pushButtonDivision_clicked()
Calculator::on_pushButtonMultiplication_clicked()
Ну, это был глупый …
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