Wert in Zelle des QTableWidget

Alles rund um die Programmierung mit Qt
Antworten
nico
Beiträge: 16
Registriert: 27. April 2009 21:42

Wert in Zelle des QTableWidget

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Dafür gibts QTableWidget::rowCount() und QTableWidget::columnCount()
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

oder du fragst ab ob das Item NULL ist
nico
Beiträge: 16
Registriert: 27. April 2009 21:42

Beitrag 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?
nico
Beiträge: 16
Registriert: 27. April 2009 21:42

Beitrag 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
forgoden
Beiträge: 120
Registriert: 10. Februar 2008 17:52

Beitrag von forgoden »

bei mir zeigt keine warnung. was fürn compiler benützt du?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
nico
Beiträge: 16
Registriert: 27. April 2009 21:42

Beitrag von nico »

Ah okay danke!
Problem gelöst :)
Antworten