2015-02-18 2 views
0

Я пытаюсь реализовать свою собственную модель для QtTableWiew. Но я встал на проблему с вставкой столбца в мою модель. Вот код для моего собственного метода insertColumns:QtAbstractItemModel endInsertColumns() index out of range

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); 

Вот реализация insertColumn в d-> таблице:

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,""); 
     } 
    } 
} 

Код порождает ошибку на endInsertColumns() в insertColumns Метод метод:

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 вызывает ошибку и как ее ремонтировать?

Спасибо за помощь

+0

Что такое значение 'index' в' insertColumns (index, 1); '? – vahancho

+0

Его индекс текущего столбца. В отладке это значение выглядит хорошо, и метод insertColumn в XMLTable работает без проблем. – Zlopez

+0

Да, но какова его ценность? Вы должны понимать, что в какой-то момент значение индекса, которое вы используете, находится вне границы вашего вектора, и вам нужно знать, почему это происходит. Если он выглядит хорошо и работает без проблем, в чем ваш вопрос? – vahancho

ответ

0

Так я нашедший решение сам. Проблема заключалась в методе beginInsertColumns. Когда я попытался вызвать его с этим:

beginInsertColumns(parent,column,column+count); 

, чем последний индекс был перенесен на 1. Таким образом, я решил его модификации призвание метод insertColumns как это:

insertColumns(index,0); 

Я благодарю вас за вашу помощь ,