Es ist ziemlich spät für die Autor Frage, aber ich hatte ein ähnliches Problem und hier gelandet, vielleicht ist es wert, eine Lösung Posting kam ich mit.
Mein Verständnis ist, dass das Aktualisieren von Knoten kein Problem ist - Indizes werden nicht ungültig gemacht und die Erweiterung wird beibehalten. Wenn Sie jedoch einen neuen Knoten hinzufügen, scheint der Standardwert zu sein, dass der Knoten minimiert wird. Die Brache kleine Hack ändert die Standard alle neu hinzugefügten Indizes zu erweitern:
// This is done at the point where the model is set to be used by the view
connect(&model, &QAbstractItemModel::rowsInserted,
[&](const QModelIndex &parent, int first, int last) {
for (; first <= last; ++first) {
tree_view->expand(
model.index(first, 0, parent));
}
});
Falls Sie einen Knoten mit einer neuen Version ersetzt werden soll (es entfernen und ein neues an seiner Stelle hinzufügen) Sie ein ähnliches verwenden können Ansatz: Erinnere dich an die Erweiterung, indem du dich an QAbstractItemModel::rowsAboutToBeRemoved
anschließt und QTreeView::isExpanded()
verwendest. Der Zustand kann in einer Funktion/Steckplatz, der mit QAbstractItemModel::rowsInserted
verbunden ist, gespeichert werden.
Wie ändern Sie Ihren Baum? –
Ich rufe beginInsertRows auf (QModelIndex(), iRow, iRow); dann aktualisiere ich Daten und schließlich endInsertRows(); – MPeli
Ok ... könnten Sie Code zeigen? –