Здравствуйте!
Что-то я как-то неправильно код начал писать, теперь не знаю как разрулить.
У меня есть виджет, на котором лежит дерево QTreeView. К этому дереву подключена модель knowTreeModel (наследник класса QAbstractItemModel).
Мне нужно реализовать добавление подветки (из специального компактного представления) к указанному через QModelIndex элементу. Подветка добавляется последней в список пожветок элемента. Нужно чтобы после добавления добавленная ветка стала видна.
Я использую такой код. На входе переменная TreeItem *item указывает на элемент, к которому надо добавить подветку:
// Определяется количество подветок у элемента
int item_rows=item->childCount();
qDebug() << "paste_branch_smart() : Subbranch count " << item_rows;
// Определяется QModelIndex из TreeItem
QModelIndex item_index=knowTreeModel->get_index_by_item(item);
// Проверка, правильно ли определен QModelIndex из TreeItem
int n=knowTreeModel->getItem(item_index)->childCount();
qDebug() << "paste_branch_smart() : Subbranch count for item by index" << n;
// Модель оповещается что будет добавление подветки
knowTreeModel->beginInsertRows_middle(item_index, item_rows, item_rows);
// Добавляется подветка в Item-представление
knowTreeModel->paste_subbranch(item, (clipbbranch *)branch);
// Модель оповещается, что добавление окончено
knowTreeModel->endInsertRows_middle();
// Вид обновляется
knowTree->update();
Код для beginInsertRows_middle() / ndInsertRows_middle() следующий:
void KnowTreeModel::beginInsertRows_middle( const QModelIndex & parent, int first, int last )
{
beginInsertRows(parent, first, last);
}
void KnowTreeModel::endInsertRows_middle()
{
endInsertRows();
}
Отладочный вывод показывает, что используется правильный QModelIndex:
paste_branch_smart() : Subbranch count 17
paste_branch_smart() : Subbranch count for item by index 17
Однако после выполнения этого кода, в Item-представлении новые данные добавляются, а на экране новая подветка не появляется.
Вопрос. Почему так? Что нужно сделать, чтобы увидеть строку с новой подветкой?