Seite 1 von 1

Problem mit QTableWidget

Verfasst: 26. Dezember 2011 19:47
von Algorithm93
Hallo,

heute schon das zweite Problem, ich hoffe ihr könnt mir da genau so prima weiterhelfen, wie bei meiner ersten Frage.

Ich habe eine Funktion, die Daten aus einer Datei in ein QTableWidget laden soll:

Code: Alles auswählen

int row = 0;
    QString Zeile;

    QFile Datei("test.txt");
    Datei.open(QIODevice::ReadOnly);

    QTableWidgetItem *itemA = new QTableWidgetItem;
    QTableWidgetItem *itemB = new QTableWidgetItem;
    QTableWidgetItem *itemC = new QTableWidgetItem;
    QTableWidgetItem *itemD = new QTableWidgetItem;
    QTableWidgetItem *itemE = new QTableWidgetItem;

    while(Datei.canReadLine())
    {
        Zeile = Datei.readLine();
        itemA->setText(Zeile);
        Zeile = Datei.readLine();
        itemB->setText(Zeile);
        Zeile = Datei.readLine();
        itemC->setText(Zeile);
        Zeile = Datei.readLine();
        itemD->setText(Zeile);
        Zeile = Datei.readLine();
        itemE->setText(Zeile);

        ui->tableWidget->insertRow(row);

        ui->tableWidget->setItem(row, 0, itemA);
        ui->tableWidget->setItem(row, 1, itemB);
        ui->tableWidget->setItem(row, 2, itemC);
        ui->tableWidget->setItem(row, 3, itemD);
        ui->tableWidget->setItem(row, 4, itemE);

        row++;
    }

    Datei.close();
Das QTableWidget hat 5 columns.
Die Datei test.txt hat z.B. 15 Zeilen, dann sollen die ersten fünf in eine row, dann Zeile 6 bis 10 in die zweite row, usw. Immer eine Zeile der Datei pro Zelle des QTableWidgets.
Die Funktion funktioniert so nicht, ich weiß sogar warum, nämlich weil das "tableWidget" die ownership übernimmt.
Ergebnis: Immer die letzten 5 Zeilen der Datei stehen in der ersten row des tableWidgets und ich habe dahinter x leere rows.

Jetzt meine Frage: wie kann ich dieses Problem lösen?

Gruß und Danke im Vorraus,
Algorithm93

Re: Problem mit QTableWidget

Verfasst: 26. Dezember 2011 20:48
von DBGTMaster
Wie wärs mit:

Code: Alles auswählen

int row = 0;
    QString Zeile;

    QFile Datei("test.txt");
    Datei.open(QIODevice::ReadOnly);

    while(Datei.canReadLine())
    {

     QTableWidgetItem *itemA = new QTableWidgetItem;
    QTableWidgetItem *itemB = new QTableWidgetItem;
    QTableWidgetItem *itemC = new QTableWidgetItem;
    QTableWidgetItem *itemD = new QTableWidgetItem;
    QTableWidgetItem *itemE = new QTableWidgetItem;

        Zeile = Datei.readLine();
        itemA->setText(Zeile);
        Zeile = Datei.readLine();
        itemB->setText(Zeile);
        Zeile = Datei.readLine();
        itemC->setText(Zeile);
        Zeile = Datei.readLine();
        itemD->setText(Zeile);
        Zeile = Datei.readLine();
        itemE->setText(Zeile);

        ui->tableWidget->insertRow(row);

        ui->tableWidget->setItem(row, 0, itemA);
        ui->tableWidget->setItem(row, 1, itemB);
        ui->tableWidget->setItem(row, 2, itemC);
        ui->tableWidget->setItem(row, 3, itemD);
        ui->tableWidget->setItem(row, 4, itemE);

        row++;
    }

    Datei.close();

Re: Problem mit QTableWidget

Verfasst: 26. Dezember 2011 23:16
von Algorithm93
Hallo,

nachdem ich "Datei.canReadLine()" in "!Datei.atEnd()" umgeändert habe, funktioniert es nach Deinem Vorschlag bestens.
Bloß, was ist da der wesentliche Unterschied? Ist es so, dass nach Deinem Vorschlag bei jedem Schleifendurchgang "neue" QTableWidgetItems "gemacht" werden?
Wieso gibt es da keine Probleme mit den Namen? Und Wieso geht es so?

Gruß und Danke vielmals,
Algorithm93

Re: Problem mit QTableWidget

Verfasst: 26. Dezember 2011 23:25
von Christian81
Natürlich müssen immer neue Items erstellt werden da, wie Du schon bemerkt hast, das QTableWidget für jede Zelle ein eigenes Item benötigt.
Was meinst Du mit 'Namen' ? Doch hoffentlich nicht die Variablennamen!

Re: Problem mit QTableWidget

Verfasst: 26. Dezember 2011 23:39
von Algorithm93
Christian81 hat geschrieben:Natürlich müssen immer neue Items erstellt werden da, wie Du schon bemerkt hast, das QTableWidget für jede Zelle ein eigenes Item benötigt.
Weil das QTableWidget die "ownership" übernimmt? Klingt irgendwie logisch!
OK, dann ist mir das klar.

Gruß und Danke nochmals,
Algorithm93