QtAbstractItemModel endInsertColumns()索引超出范围

时间:2015-02-18 10:02:29

标签: c++ qt qtableview

我正在尝试为QtTableWiew实现自己的模型。但我在插入列到我的模型时遇到了问题。这是我自己的insertColumns方法的代码:

bool DbTableModel::insertColumns(int column, int count, const QModelIndex &parent) {
   Q_D(DbTableModel);

    beginInsertColumns(parent,column,column+count);
    d->table->insertColumn(column, "");
    endInsertColumns();

    return true;
}

以下是insertColumns的调用方式:

insertColumns(index,1);

这是d-> table中的insertColumn的实现:

void XMLTable::insertColumn(int index, QString name)
{
    Q_D(XMLTable);

    d->columns.insert(d->columns.begin() + index + 1,name);

    for(int i = 0;i < d->data.count();i++)
    {
        if(index + 1 >= d->data[i].count())
        {
            d->data[i].append("");
        }
        else
        {
            d->data[i].insert(index + 1,"");
        }
    }
}

代码在insertColumnsMethod方法中的endInsertColumns()上抛出错误:

 ASSERT failure in QVector<T>::operator[]: "index out of range", file ..\..\..\Qt\5.4\mingw491_32\include\QtCore/qvector.h, line 396
 Invalid parameter passed to C runtime function.
 Invalid parameter passed to C runtime function.

我的问题是:为什么endInsertColumns会抛出错误以及如何修复它?

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

所以我自己找到了解决方案。问题出在beginInsertColumns方法中。当我试着用它调用它时:

beginInsertColumns(parent,column,column+count);

比上一个索引移动了1.所以我通过修改方法insertColumns的调用解决了这个问题:

insertColumns(index,0);

我感谢你的帮助。