Problem mit QTableWidget

Alles rund um die Programmierung mit Qt
Antworten
Algorithm93
Beiträge: 26
Registriert: 24. April 2011 10:37

Problem mit QTableWidget

Beitrag 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
DBGTMaster
Beiträge: 190
Registriert: 19. August 2010 10:00

Re: Problem mit QTableWidget

Beitrag 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();
Algorithm93
Beiträge: 26
Registriert: 24. April 2011 10:37

Re: Problem mit QTableWidget

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

Re: Problem mit QTableWidget

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

'Funktioniert nicht' ist keine Fehlerbeschreibung
Algorithm93
Beiträge: 26
Registriert: 24. April 2011 10:37

Re: Problem mit QTableWidget

Beitrag 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
Antworten