Seite 1 von 1
[gelöst]variablen Text in ein QTableWidgetItem schreiben
Verfasst: 13. November 2007 23:35
von qtNiko
hallo,
ich hänge an einem einfach erscheinenden Problem:
Ich möchte die Felder eines QTableWidget füllen.
Ein Pointer "table" auf die Tabelle existiert.So konnte ich z.B. die Headerlabels beschreiben mit table->setVerticalHeaderLabels(paramNames);
Jetzt sollen die Felder gefüllt werden:
Code: Alles auswählen
for (int i=0; i<paramNames.count(); i++) {
table->item(i,0)->setText(QString::number(i));
}
Sobald das erste mal table->item... durchlaufen werden soll, stürzt das Programm ab.
Die Art und Weise des Füllens habe ich aus meinem Qt4-Buch abgeschrieben.
Was stimmt denn da nicht?
Verfasst: 14. November 2007 07:34
von macman
Mit einem Debugger hättest Du wahrscheinlich festgestellt das table->item(i,0) == NULL.
Verfasst: 14. November 2007 23:41
von qtNiko
hallo,
das ist tatsächlich so, der Pointer item() ist NULL.
Ich hatte mit dem Qt-Designer einen Dialog und darin ein QTableWidget erstellt. Bei letzterem hatte ich im Designer bereits rowCount=10 und columnCount=1 angegeben .
Nun ging ich davon aus, dass der Designer nicht nur die Grafik, sondern mir auch bereits die items erstellt , und ich sie nur noch verwenden müsse. Das könnte er doch ohne weiteres. Er hat ja alle Infos, nun ja ...
Heiß das, dass ich erst jedes einzelne item im Programm erstellen muss (mit addRow() vermutlich), oder kann ich, wie mir vor kurzem hier im Forum in anderem Zusammenhang geraten wurde, mit findChild arbeiten?
Die Frage ist schlicht, erstellt der Designer bereits items, die ich nur noch "finden" muss, oder muss ich sie alle selbst erstellen?
Mein Qt-Buch lässt sich hierüber überhaupt nicht aus. Der Designer kommt darin viel zu kurz vor, gerade als ob sich ohnehin niemand dafür interessieren würde.
Verfasst: 15. November 2007 07:52
von macman
qtNiko hat geschrieben:Das könnte er doch ohne weiteres. Er hat ja alle Infos, nun ja ...
Hat er nicht. Jede Tabellenzelle ist ein Item und Du kannst für jedes Item festlegen, ob es editierbar, selektierbar etc. ist.
qtNiko hat geschrieben:Heiß das, dass ich erst jedes einzelne item im Programm erstellen muss (mit addRow() vermutlich),
Die Anzahl der Reihen und Spalten hast Du ja bereits vorgegeben. Items erstellst Du etwa so:
Code: Alles auswählen
tableWidget->setItem( x, y, new QTableWidgetItem( inhalt ) );
qtNiko hat geschrieben:Der Designer kommt darin viel zu kurz vor, gerade als ob sich ohnehin niemand dafür interessieren würde.
Der Designer würde dir wahrscheinlich die entsprechenden Items erstellen, wenn Du sie im Designer bereits mit Inhalten füllen kannst. Nur meistens weiß man eben noch nicht was in die einzelnen Zellen kommt. Deshalb nutze ich den Designer wirklich nur für die Oberfläche, alle Inhalte werden im Code erstellt.
Verfasst: 15. November 2007 08:40
von qtNiko
hallo,
vielen Dank noch mal für die Infos.
Jetzt geht's also ran ans Programmieren.