QtAbstractItemModel endInsertColumns() 索引超出范围
QtAbstractItemModel endInsertColumns() index out of range
我正在尝试为 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.4\mingw491_32\include\QtCore/qvector.h, line 396
Invalid parameter passed to C runtime function.
Invalid parameter passed to C runtime function.
我的问题是:为什么 endInsertColumns 会抛出错误以及如何修复它?
感谢帮助
所以我自己找到了解决方案。问题出在 beginInsertColumns 方法中。当我试图用这个调用它时:
beginInsertColumns(parent,column,column+count);
比最后一个索引移动了 1。所以我通过修改方法 insertColumns 的调用解决了这个问题:
insertColumns(index,0);
谢谢你的帮助。
我正在尝试为 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.4\mingw491_32\include\QtCore/qvector.h, line 396
Invalid parameter passed to C runtime function.
Invalid parameter passed to C runtime function.
我的问题是:为什么 endInsertColumns 会抛出错误以及如何修复它?
感谢帮助
所以我自己找到了解决方案。问题出在 beginInsertColumns 方法中。当我试图用这个调用它时:
beginInsertColumns(parent,column,column+count);
比最后一个索引移动了 1。所以我通过修改方法 insertColumns 的调用解决了这个问题:
insertColumns(index,0);
谢谢你的帮助。