Hi,
ich verwende die Klassen des Qt Simple Tree Model Example in meinem Programm. Die Datensätze sind ja alle als read-only in das model eingefügt worden.
Ich habe jetzt einfach diese Funktion hinzufügen wollen damit mein Model Änderungen aufnehmen kann.
Ich habe die setData Geschichte nicht begriffen.
Müsste ich ein temp TreeItem anlegen und mit den Daten ModelIndex, Pointer und Wert füllen und gegen das alte "tauschen" überschreiben?
"Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)
also du verwendest ja den Grundgedanken des genannten Beispiels. Dieses Beispiel implementiert sich ein eigenes Model (event. auch eigenen View, kenn das Bsp nun nicht auswendig).
Und ganz wichtig, es verwendet seine eigene Item-struktur, welche die Daten "kennt".
Folgender Ansatz gilt ja immer beim Interview Designpattern:
Ein View fragt benötigte Daten an, dazu wird das Model gefragt:
- Wie viele Zeilen hast du?
- Wie viele Spalten hast du?
- Welche Daten sollen für Zeile X Spalte Y angezeigt werden?
- ...
Das Model widerum kennt seine Items und kann dementsprechend die Fragen des Views beantworten. Die Items wiederum kennen ihre Daten.
Der View, sowie das Model kommunizieren mit QModelIndex Objekten (die sind kurzlebig!). Auf gut Deutsch: Das View indiziert mit QModelIndexen deine Items. Und so kommt's, wenn du was schreiben willst, dass das View dem Model mit setData ( Value und ModelIndex ) sagt, ich will Daten schreiben.
Über den QModelIndex hast du die Möglichkeit, dein Item ausfindig zu machen, um darin (mit zB. geeigneter FUnktion) den Value zu setzen. Und deswegen mein Hinweis auf die data() Funktion, weil du es da eigentlich vorgemacht bekommst, wie du an dein Item rankommst. Darüber hinaus macht es auch Sinn, sich die anderen FUnktionen mal anzuschauen um zu erkennen, wo das Item einem QModelIndex zugeordnet wird!
Viel Erfolg!
PS: Ja, man muss es erst einmal kapiert haben, ist ein wenig komplex, das Konstrukt 8)
QVariant TreeModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid())
return QVariant();
if (role != Qt::DisplayRole)
return QVariant();
TreeItem *item = static_cast<TreeItem*>(index.internalPointer());
return item->data(index.column());
}
Wie teile ich den dem Model neben den ModelIndex, was ja dem Ort meiner Gewünschten Veränderung der Daten betrifft auch den WERT mit den ich dort statt des bisherigen haben will?
"Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)