Application crashes on calling QAbstractItemModel::endRemoveRows()



  • I have a custom model which derives from QAbstractListModel which is exposed to QML. I need to support operations to add new items and remove existing items. While insertion operation works without any problems, removal operation causes the application to crash while calling endRemoveRows() function.
    @
    QObject *GPageModel::at(int index)
    {
    GPage * page = m_pageList.at(index);
    return page;
    }
    void GPageModel::addNewPage()
    {
    if(m_pageList.count()<9)
    {
    beginInsertRows(QModelIndex(),rowCount(),rowCount());
    GPage * page = new GPage();
    QQmlEngine::setObjectOwnership(page,QQmlEngine::CppOwnership);
    page->setParent(this);
    page->setNumber(m_pageList.count());
    page->setName("Page " + QString::number(m_pageList.count()+1));
    m_pageList.append(page);
    endInsertRows();
    }
    }
    void GPageModel::removePage(const int index)
    {
    if(index>=0 && index<m_pageList.count())
    {
    beginRemoveRows(QModelIndex(),index,index);
    qDebug()<<QString("beginRemoveRows(QModelIndex(),%1,%1)").arg(index);
    GPage * page = m_pageList.at(index);
    m_pageList.removeAt(index);
    delete page;
    endRemoveRows();
    }
    }
    @

    The class GPage derives from QObject. The model contains list of GPage objects. Class GPage has some properties which I have used for binding in QML. I am struck trying to figure out what is causing the app to crash while trying to call endRemoveRows(). I get "ASSERT failure in QList::at: "index out of range"" when endRemoveRows() is called.How do I remove the rows from a QAbstracListModel? Is there any other way?

    I am using Qt 5.1.0 on a Windows 7 64 bit machine.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.