Seite 1 von 1

[gelöst] QWidgetTableWidget füllen

Verfasst: 4. Dezember 2009 10:18
von RogerWilco
Guten Morgen,

gestern lief es noch... heute habe ich damit meine Probleme (nach einigem experimentieren ) :roll: :oops:
"Ausgabe der Anwendung: Das Programm ist abgestürzt".

Die Doku bezieht sich leider irgendwie in den Beispielen immer darauf, wenn man das Widget komplett selbst schreibt, ich habe die Tabelle aber mit dem Creator eingefügt.
(open csv öffnet einen Datensatz, den ich später in die Tabelle schreiben will)

Muss ich vorher jede Zelle durchlaufen und definieren?

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

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
openCsv(Spektrum);

ui->tableWidget->setRowCount(5000);
ui->tableWidget->setColumnCount(5);

ui->tableWidget->item(1,1)->setText("test!"); //läuft, wenn diese Zeile auskommentiert

}

Verfasst: 4. Dezember 2009 10:27
von archer
Ich vermute mal das

Code: Alles auswählen

ui->tableWidget->item(1,1) 
NULL zurückgibt.

Versuch es mal mit

Code: Alles auswählen

     QTableWidgetItem *newItem = new QTableWidgetItem("test!");
     ui->tableWidget->setItem(1, 1, newItem);
Steht auch in der Doku von QTableWidget!

Verfasst: 4. Dezember 2009 10:31
von RogerWilco
Du bist ja schneller als die Feuerwehr und es funktioniert sogar! vielen Dank!

Wenn man das jetzt aber für jede Zelle machen muß, ist das aber schon irgendwie unhandlich.... (trotz Schleifen)
Später soll nämlich einfach ein QVector die Spalte füllen...

Verfasst: 4. Dezember 2009 11:06
von archer
Eine andere Möglichkeit wäre ein QTableView mit einem eigenen Modell
(Abgeleitet von QAbstractTableModel).
Dann wärst du auch flexibler. Ich mache das immer so.

Verfasst: 4. Dezember 2009 11:16
von RogerWilco
Dazu stehen ja ein Paar Zeilen im Qt-Buch.
Aber für mich als Anfänger ist das (vorerst) noch zu hoch.
Aber vielen Dank!

Verfasst: 4. Dezember 2009 12:48
von RHBaum
Wenn man das jetzt aber für jede Zelle machen muß, ist das aber schon irgendwie unhandlich
aehm huestel , naja wenigstens kannste s mit schleifen machen ^^
um die schleifen bzw, befuellen jeder Zeile / spalte mit hilfe von schleifen kommst ned drumherum, es sei denn fuer deinen zweck gibts scho was fertiges.

Fertige dinge waeren:
Directorymodell, QSQLTableModel, QStringListModel z.b.
wo dir das iterieren (Schleifendurchlauf über alle elemente in einem container) abgenommen werden, weil die Models halt ihre Container genau kennen.

ciao ...

Verfasst: 4. Dezember 2009 13:15
von RogerWilco
Ja, mit einer Listview ging es ganz einfach.
Das Problem ist ja nicht die Schleife ansich...
Dank append ist der QVector ja so schön dynamisch, falls er mal größer oder kleiner ist...
Man könnte natürlich für jede Tabellenspalte die entsprechende Vektorlänge mitübergeben und entsprechend durchlaufen....
Also je mehr ich darüber nachdenke...
Kann doch eigentlich nicht so schwer sein.

Vielen Dank an alle.