Russian Qt Forum
Апрель 19, 2024, 02:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: canFetchMore AbstractItemModel::endInsertRows invalidIndex  (Прочитано 4280 раз)
nvek
Гость
« : Май 19, 2017, 08:02 »

QAbstractItemModel::endInsertRows:  Invalid index ( 1 , 0 ) in model StatTreeCtrl(0xfb3f087e80)
 StatTreeCtrl наследник QAbstractItemModel

.h

Код:
virtual bool canFetchMore(const QModelIndex &parent) const;
virtual void fetchMore(const QModelIndex & parent);
virtual bool hasChildren(const QModelIndex &parent) const;

virtual bool insertRows(int row, int count, const QModelIndex &parent /* = QModelIndex() */);
virtual bool removeRows(int position, int rows, const QModelIndex & parent = QModelIndex());



.cpp
Код:
void StatTreeCtrl::fetchMore(const QModelIndex & parent)
{
StatisticItem* item = getItem(parent);

beginInsertRows(parent, 0, item->children().size() - 1);


endInsertRows();
}

bool StatTreeCtrl::hasChildren(const QModelIndex & parent) const
{
if (!parent.isValid())
{
StatisticItem* item = getItem(parent);
if (item->children().count() > 0)
return true;
}
return QAbstractItemModel::hasChildren(parent);
}

bool StatTreeCtrl::canFetchMore(const QModelIndex & parent) const
{
StatisticItem* item = getItem(parent);
if (item->children().count() > 0)
return true;
else return false;
}

bool StatTreeCtrl::insertRows(int position, int rows, const QModelIndex& parent /* = QModelIndex() */)
{
StatisticItem* parentItem = getItem(parent);
bool success;

beginInsertRows(parent, position, position + rows - 1);
success = parentItem->insertChildren(position, rows);
endInsertRows();

return success;
}

bool StatTreeCtrl::removeRows(int position, int rows, const QModelIndex & parent)
{
StatisticItem *parentItem = getItem(parent);//static_cast<StatisticItem*>(parent.internalPointer());
bool success = true;

beginRemoveRows(parent, position, position + rows - 1);
success = parentItem->removeChildren(position, rows);
endRemoveRows();

return success;
}

Код:
StatisticItem * StatTreeCtrl::getItem(const QModelIndex & index) const
{
if (index.isValid()) {
StatisticItem *item = static_cast<StatisticItem*>(index.internalPointer());
if (item)
return item;
}
return rootItem;
}

StatisticItem - контейнер данных
самый первый элемент(корневой) добавил, при наведении показывает кот такую ошибку
у итема показывает чайлда. а так просто развернуть не хочет...
не хочет равернуть данные взятые из  xml
« Последнее редактирование: Май 19, 2017, 08:07 от nvek » Записан
maks1596
Гость
« Ответ #1 : Июнь 03, 2018, 13:25 »

Прочтите https://habr.com/post/172187/
Без флага в структуре "дочерние элементы уже загружены" дерево будет долбиться за данными гораздо больше, чем нужно.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.07 секунд. Запросов: 20.