На часть вопросов сам получил ответы:
Работая с моделью (например, вызывая insertRows), мы должны какую модель использовать?
Насколько я понял, можно работать с любой моделью. Но если мы хотим использовать исходную модель, то нужно приводить текущий индекс через mapToSource к индексу исходной модели.
Если прокси, то какую модель мы получаем вызовом QAbstractItemView::model ()
Получаем модель прокси.
Но проблема вот в чем, если не использовать reset(), но новая строка не видна (вместе со скрытой веткой). А как обойтись без reset()?
Код insertRows в основной модели:
bool TreeModel::insertRows(int position, int rows, const QModelIndex &parent) {
TreeItem *parentItem = getItem(parent);
bool success;
beginInsertRows(parent, position, position + rows - 1);
success = parentItem->insertChildren(position, rows, rootItem->columnCount());
endInsertRows();
reset();
return success;
}
Вот если оставить там reset() то все идеально работает - но это неправильно, да и модель сворачивается. Можно ли обойтись без reset()?