QTableView: eigenen Datentyp aufnehmen/darstellen

Alles rund um die Programmierung mit Qt
Antworten
edwood
Beiträge: 1
Registriert: 1. Juli 2011 00:35

QTableView: eigenen Datentyp aufnehmen/darstellen

Beitrag von edwood »

Hi, ich habe eine QTableView in der ich Objekte meiner eigenen Klasse darstellen will, also z.b. so etwas (PseudoCode):

Code: Alles auswählen

class Fahrzeug {
   string Typ;
   string Farbe;
   int Nummer;
}
jetzt will ich in meiner QTableView einfach eine Liste mit Fahrzeugen darstellen, also:

Code: Alles auswählen

TYP  FARBE  NUMMER
Ford     rot       4
VW   schwarz   6
....
allerdings will ich nicht einfach nur jeden einzelnen Member im TableModel als String speichern, sondern ich will das komplette Objekt im TableModel speichern. Und zwar deswegen weil ich später, wenn eine Zeile angeklickt wird, einfach das komplette Objekt auslesen will und nicht einzelne Strings die ich dann wieder zu einem Objekt zusammenbauen muss oder umständlich in meiner Liste wieder zusammensuchen muss.

also als Pseudocode:

Code: Alles auswählen

model.appendRow(auto1);
model.appendRow(auto2);
und nicht:

Code: Alles auswählen

model.appendRow(auto1.Typ, auto1.farbe, auto1.nummer);
model.appendRow(auto2.Typ, auto2.farbe, auto2.nummer);
ich denke das muss eh ein sehr häufiges Szenario sein, allerdings finde ich immer nur einfache Beispiele wie man einzelne Strings und Nummern setzt. Vielleicht kann mir einfach wer den richtigen Hinweis oder Stichwort geben das mir weiterhilft.
Bin ich eigentlich mit dem QAbstractTableModel am richtigen Weg?
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Du schreibst dir ja sowieso ein eigenes Model. Schau dir z.B. mal in den Qt-Examples das itemviews/simpledommodel-example an. Sieh dir speziell die Erstellung des Models an (Aufbau aus DomItems - ist bissl versteckt in DomItem::child()) und wie das mit dem internalPointer() funktioniert.

Bei dir hast du halt keinen Baum, sondern eine Tabelle, und der internalPointer() wird ein "Fahrzeug *". Du musst dann nur noch eine Methode "Fahrzeug* FahrzeugModel::fahrzeug(QModelIndex const&) const" anbieten. Wenn du das oben halbwegs verstanden hast, weißt du, dass die Methode in zwei Zeilen programmiert ist. :)
Antworten