Это довольно поздно для автора на вопрос, но у меня была аналогичная проблема, и в конечном итоге здесь, так что, возможно, стоит вывешивать решение, которое я придумал.
Я понимаю, что обновление узлов не является проблемой - индексы не являются недействительными и расширение сохраняется. Однако, когда вы добавляете новый узел, по умолчанию создается попытка свертывания узла. Парование небольшой хак изменяет значение по умолчанию, чтобы развернуть все вновь добавленные показатели:
// 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));
}
});
В случае, если вы хотите заменить узел с новой версией (удалить его и добавить новый в своем месте), вы можете использовать аналогичный подход: помните расширение, подключившись к QAbstractItemModel::rowsAboutToBeRemoved
и используя QTreeView::isExpanded()
. Состояние может быть сохранено в функции/слоте, подключенном к QAbstractItemModel::rowsInserted
.
Как вы изменяете свое дерево? –
Я вызываю beginInsertRows (QModelIndex(), iRow, iRow); затем я обновляю данные и, наконец, вызываю endInsertRows(); – MPeli
Хорошо ... Вы могли бы показать какой-то код? –