Seite 1 von 1

Wert in Zelle des QTableWidget

Verfasst: 13. Mai 2009 14:13
von nico
Hallo,

ich habe ein QTableWidget in meinem Programm. Darin soll der Benutzer Werte eingeben.

Nun soll eine Spalte aus zwei anderen berechnet werden. Dazu frage ich die Werte ab:

Code: Alles auswählen

QString masseS = tableWidget->item(row, masseCol)->text();
        QString heizS = tableWidget->item(row, heizCol)->text();

        if(!(masseS=="") && !(heizS==""))
        {
            double foo = masseS.toDouble()*heizS.toDouble();
            tableWidget->item(row, unbeCol)->setText(QString::number(foo));
        }
Allerdings stürzt das Programm natürlich ab, wenn item(row, heizCol) leer ist. Wie kann ich das abfangen? Ich habe gelesen, dass man bei der Qt-Programmierung nicht unbedingt Exceptions verweden sollte. Wenn doch - welche wäre das hier?

Vielen Dank für eure Mühe,

MfG nico

Verfasst: 13. Mai 2009 15:05
von Christian81
Dafür gibts QTableWidget::rowCount() und QTableWidget::columnCount()

Verfasst: 13. Mai 2009 15:08
von AuE
oder du fragst ab ob das Item NULL ist

Verfasst: 13. Mai 2009 16:08
von nico
Vielen Dank für eure schnellen Antworten!
Dafür gibts QTableWidget::rowCount() und QTableWidget::columnCount()
Sind die nicht dafür da, auszugeben wieviele Zeilen/Spalten es gibt? Ich muss doch wissen, ob eine Zelle leer ist und nicht, ob sie existiert.

Code: Alles auswählen

QString masse, heiz;
        if(!tableWidget->item(row, masseCol)==NULL)
            masse = tableWidget->item(row, masseCol)->text();
        if(!tableWidget->item(row, heizCol)==NULL)
            heiz = tableWidget->item(row, heizCol)->text();

        if(!(masse=="") && !(heiz==""))
        {
            double brandlast = masse.toDouble()*heiz.toDouble();;
            tableWidget->item(row, unbeCol)->setText(QString::number(brandlast));
        }
Da bekomme ich jeweils eine Warnung:

Code: Alles auswählen

Warnung: NULL in Arithmetik verwendet
Kann ich die ignorieren?

Außerdem stürzt das Programm nun in dieser Zeile ab:

Code: Alles auswählen

tableWidget->item(row, unbeCol)->setText(QString::number(brandlast));
Könnt ihr mir da bitte nocheinmal weiterhelfen?

Verfasst: 14. Mai 2009 12:23
von nico
Okay, den Wert kann ich nun setzen.

Allerdings steht noch die Frage, ob ich diese Warnung ignorieren kann:

Code: Alles auswählen

Warnung: NULL in Arithmetik verwendet

Verfasst: 15. Mai 2009 22:06
von forgoden
bei mir zeigt keine warnung. was fürn compiler benützt du?

Verfasst: 15. Mai 2009 22:12
von Christian81

Code: Alles auswählen

if(!tableWidget->item(row, masseCol)==NULL) 
Das ist ja auch falsch - C++ Grundlagen 'Operator-Vorrang'.

Code: Alles auswählen

if(tableWidget->item(row, masseCol)!=NULL)
so ists richtig

Verfasst: 19. Mai 2009 15:18
von nico
Ah okay danke!
Problem gelöst :)