Russian Qt Forum

Qt => Model-View (MV) => Тема начата: nvek от Май 19, 2017, 08:02



Название: canFetchMore AbstractItemModel::endInsertRows invalidIndex
Отправлено: 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


Название: Re: canFetchMore AbstractItemModel::endInsertRows invalidIndex
Отправлено: maks1596 от Июнь 03, 2018, 13:25
Прочтите https://habr.com/post/172187/ (https://habr.com/post/172187/)
Без флага в структуре "дочерние элементы уже загружены" дерево будет долбиться за данными гораздо больше, чем нужно.