• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Qt creator problem

Object Storage Arubacloud
0 głosów
170 wizyt
pytanie zadane 29 czerwca 2020 w C i C++ przez Jakub Mianowski Nowicjusz (140 p.)
edycja 29 czerwca 2020 przez Jakub Mianowski

Witam.Jestem  początkujący  w Qt creatorze . Wykonałem kalkutor z operacjami  dodawania/odejmowania/dzielenia  i mnożenia,fajnie  to wygląda tylko brakuje  odpowiedniego działania  wciskając przycisk pushbutton mnożenie/dodawanie/odejmowanie wyskakuje  wynik  0 gdy  dzielenia nan . Czy mógłby mi ktoś pomóc ?

 

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
     , ui(new Ui::MainWindow)

{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::on_p7_clicked()
{
     ui->aktualne->setText (ui->aktualne->text()+"7");
}

void MainWindow::on_p8_clicked()
{
      ui->aktualne->setText (ui->aktualne->text()+"8");

}

void MainWindow::on_p9_clicked()
{

  ui->aktualne->setText (ui->aktualne->text()+"9");
}

void MainWindow::on_p4_clicked()
{
      ui->aktualne->setText (ui->aktualne->text()+"4");
}

void MainWindow::on_p5_clicked()
{
      ui->aktualne->setText (ui->aktualne->text()+"5");
}

void MainWindow::on_p6_clicked()
{
      ui->aktualne->setText (ui->aktualne->text()+"6");
}

void MainWindow::on_p1_clicked()
{
      ui->aktualne->setText (ui->aktualne->text()+"1");
}

void MainWindow::on_p2_clicked()
{
      ui->aktualne->setText (ui->aktualne->text()+"2");
}

void MainWindow::on_p3_clicked()
{
      ui->aktualne->setText (ui->aktualne->text()+"3");
}

void MainWindow::on_p0_clicked()
{
   ui->aktualne->setText (ui->aktualne->text()+"0");

}

void MainWindow::on_plus_clicked()
{
    QString Txt= ui->aktualne->text();
    double x= Txt.toDouble();
    ui->aktualne->setText(QString("%1").arg(x));
    ui->aktualne->setText(ui->aktualne->text()+"+");
left=ui->aktualne->text().toDouble();
 opt=plus;

}

void MainWindow::on_pushButton_15_clicked()
{
    ui->aktualne->setText(ui->aktualne->text()+"=");
right=ui->aktualne->text().toDouble();

    double tmp;
    switch (opt) {
    case plus:
tmp=right+left;

    ui->aktualne->setText(QString::number(tmp));
    }
    switch (opt){
    case minus:
        tmp=right-left;
       ui->aktualne->setText(QString::number(tmp));
}

    ui->aktualne->setText(QString::number(tmp));
    switch (opt){
    case multiply:
        tmp=right*left;
       ui->aktualne->setText(QString::number(tmp));
    }
    ui->aktualne->setText(QString::number(tmp));
    switch (opt){
    case devide:
        tmp=right/left;
       ui->aktualne->setText(QString::number(tmp));
    }
}

void MainWindow::on_pushButton_14_clicked()
{
    ui->aktualne->clear();
}

void MainWindow::on_commaBtn_clicked()
{
    ui->aktualne->setText(ui->aktualne->text()+",");
}

void MainWindow::on_pushButton_2_clicked()
{
    ui->aktualne->setText(ui->aktualne->text()+"000");
}

void MainWindow::on_minus_clicked()
{
    ui->aktualne->setText(ui->aktualne->text()+"-");
    left=ui->aktualne->text().toDouble();
    opt=minus;
}

void MainWindow::on_multiply_clicked()
{
    ui->aktualne->setText(ui->aktualne->text()+"*");
    left=ui->aktualne->text().toDouble();
    opt=multiply;
}


void MainWindow::on_devide_clicked()
{
 ui->aktualne->setText(ui->aktualne->text()+"/");
}

 

komentarz 29 czerwca 2020 przez Patrycjerz Mędrzec (192,320 p.)
Nie twórz na przyszłość duplikatów pytań. Pierwotny post można edytować za pomocą przycisku z ikoną ołówka.

1 odpowiedź

0 głosów
odpowiedź 29 czerwca 2020 przez TOM_CPP Pasjonat (22,640 p.)

Jak myślisz jaka jest wartość liczby left

 ui->aktualne->setText(ui->aktualne->text()+"-");
 left=ui->aktualne->text().toDouble();

kiedy na końcu stringu znajduje się znak minus?

Funkcja toDouble() zwraca zero dla wszystkich stringów nie będących liczbami, a np. string "514-" nie ma poprawnego formatu liczby.

komentarz 29 czerwca 2020 przez Jakub Mianowski Nowicjusz (140 p.)
czyli  jaki  poprawny  format  powinienem  tutaj  użyć?
1
komentarz 29 czerwca 2020 przez TOM_CPP Pasjonat (22,640 p.)

W momencie w którym próbujesz zmienić string na liczbę przy pomocy funkcji toDouble(), musisz uważać aby tekst umieszczony w stringu był prawidłową liczbą.

QString("-35.34").toDouble(); // zwróci -35.34
QString("5.04").toDouble(); // zwróci 5.04
QString("245").toDouble(); // zwróci 245
QString("3534-").toDouble(); // Błąd to nie jest prawidłowa liczba - zwróci 0
QString("adf").toDouble(); // Błąd to nie jest prawidłowa liczba - zwróci 0
QString("3-5").toDouble(); // Błąd to nie jest prawidłowa liczba - zwróci 0
QString("3+").toDouble(); // Błąd to nie jest prawidłowa liczba - zwróci 0

 

komentarz 29 czerwca 2020 przez Jakub Mianowski Nowicjusz (140 p.)
edycja 29 czerwca 2020 przez Jakub Mianowski
Czy  mógłbys  mi pokazać w jaki  sposób to  poprawić aby  było  dobrze?

Podobne pytania

–1 głos
0 odpowiedzi 210 wizyt
pytanie zadane 23 lipca 2019 w C i C++ przez Ewaryst Ławecki Obywatel (1,710 p.)
0 głosów
1 odpowiedź 254 wizyt
pytanie zadane 20 lipca 2019 w C i C++ przez Ewaryst Ławecki Obywatel (1,710 p.)
0 głosów
2 odpowiedzi 373 wizyt

92,689 zapytań

141,601 odpowiedzi

320,095 komentarzy

62,048 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...