Итак, у меня есть виджет QTreeView, в котором в качестве исходной модели используется пользовательский QSortFilterProxyModel, который сам оборачивает пользовательский объект QAbstractItemModel с именем: sourceModel
.
В моем дереве отображаются файлы и папки.Если удаление файла оставляет папку пустой, папка автоматически удаляется.Реализация ниже:
bool sourceModel::removeRows(int row, int count, const QModelIndex& parent)
{
if (parent.isValid())
{
auto parent_node = static_cast<Node*>(parent.internalPointer());
if (!parent.data(rootNode).toBool())
{
beginRemoveRows(parent, row, row + count - 1);
for (int i = 0; i < count; ++i)
parent_node->removeChild(row + i);
endRemoveRows();
if (parent_node->isType<Folder>() && parent_node->children() == 0)
{
removeRows(parent_node->row(), 1, parent.parent());
}
return true;
}
}
}
Это работает нормально, когда removeRows вызывается через модель прокси, но в другом случае, когда sourceModel напрямую вызывает removeRows, я получаю:
QSortFilterProxyModel:о несовместимых изменениях, о которых сообщает исходная модель
Как будто QSortFilterProxyModel не получает или не обрабатывает beginRemoveRows / endRemoveRows должным образом.