[gelöst] QTreeView aktualisiert beim Löschen nicht richtig
Verfasst: 17. Juli 2009 07:01
Hallo zusammen.
Ich habe ein kleines Problem mit dem Einfügen und Löschen bei einem selbst definiertes Model und einer QTreeView zum Darstellen von XML-Dateien (-> verwendetes Dommodel).
Leider aktualisiert er meine TreeView nicht richtig, so dass die Veränderungen an der Daten zu Fehlern in der Anzeige führen.
Wenn ich nach dem Löschen "reset()" und "expandAll()" aufrufe, dann zeigt er mir den richtigen Baum an, jedoch ist das ja auf Dauer keine Lösung, da dann auch vorher nicht aufgeklappte Elemente aufgeklappt werden.
Rufe "beginRemoveRows()" und "endRemoveRows()" auf, sollten die die Signale nicht zur Ansicht senden?
Hier mal etwas Code:
Habe ich die Zeilenangaben bei beginRemoveRows richtig gemacht? Gebe jetzt eben die Zeile des zu löschenden Elements an..
Hoffe mal, es kennt sich jemand mit dem Thema einigermaßen aus und hat schon mal mit dem Dommodel gearbeitet (und es versucht zu erweitern)
Habe auch schon folgenden Thread gefunden: Link
Habe das dort Vorgeschlagene auch schon probiert (siehe Code), leider ohne Erfolg..
Falls ihr noch weitere Fragen zum Problem habt, schreibe diese auch bitte, dann gebe ich noch gezielt mehr Code an.
Mit freundlichen Grüßen
Hundefutter
Ich habe ein kleines Problem mit dem Einfügen und Löschen bei einem selbst definiertes Model und einer QTreeView zum Darstellen von XML-Dateien (-> verwendetes Dommodel).
Leider aktualisiert er meine TreeView nicht richtig, so dass die Veränderungen an der Daten zu Fehlern in der Anzeige führen.
Wenn ich nach dem Löschen "reset()" und "expandAll()" aufrufe, dann zeigt er mir den richtigen Baum an, jedoch ist das ja auf Dauer keine Lösung, da dann auch vorher nicht aufgeklappte Elemente aufgeklappt werden.
Rufe "beginRemoveRows()" und "endRemoveRows()" auf, sollten die die Signale nicht zur Ansicht senden?
Hier mal etwas Code:
Code: Alles auswählen
void DomModel::remove(const QModelIndex &index)
{
DomItem* tmpItem = static_cast<DomItem*>(index.internalPointer());
this->beginRemoveRows(index,tmpItem->row(),tmpItem->row()); // Zeilenangaben richtig?
tmpItem->node().parentNode().removeChild(tmpItem->node()); // Zeile löschen
// folgendes schon versucht, leider kein Erfolg (hat sogar manchmal zu Fehlern beim Löschen geführt)
//tmpItem->parent()->removeChild(tmpItem->row()); // gelöschtes Kind aus Cache (von DomItem) löschen
tmpItem->parent()->clearCache(); // Cache (von DomItem) komplett leeren, kommt sonst zu Fehler (falsche Zeilen werden gelöscht)
this->endRemoveRows();
}
Hoffe mal, es kennt sich jemand mit dem Thema einigermaßen aus und hat schon mal mit dem Dommodel gearbeitet (und es versucht zu erweitern)
Habe auch schon folgenden Thread gefunden: Link
Habe das dort Vorgeschlagene auch schon probiert (siehe Code), leider ohne Erfolg..
Falls ihr noch weitere Fragen zum Problem habt, schreibe diese auch bitte, dann gebe ich noch gezielt mehr Code an.
Mit freundlichen Grüßen
Hundefutter