2013-07-29 2 views
0

Я использую модель/представление для перестановки элементов, и я не понимаю, как переопределить метод insertRows. Просто для практики я пытаюсь обернуть std::vector с пользовательской структурой.Как получить источник insertRows?

std::vector<aStruct> mD;//my data 
bool insertRows(int start, int rows, const QModelIndex & parent) 
{ 
    auto i = parent.row(); 
    cout <<"I going to " << start << ":" << rows << " choosing "<< i<< endl; 
    beginInsertRows(parent, start, start + rows - 1); 
    aStruct blank(0);// Should be the value of the item being moved? 
    mD.insert(mD.begin()+start,blank); 
    endInsertRows(); 
    return true; 
} 

К сожалению, я не могу найти места, чтобы добраться до элемента, который удерживает меня за перемещаемый предмет. Как мне это сделать?

ответ

0

Вы должны использовать следующие шаги для вставки строк:

1. Call beginInsertRows 
2. Modify your internal data structure 
3. Call endInsertRows 

Существует все Ok в вашем образце.

View будет вставлять пустые строки (как сказал @Riateche) и будет заполнить его автоматически, после звонка endInsertRows. Все, что вам нужно, это переопределить метод YourModel::data для возврата правильных данных из вашей структуры mD.

Вид вызовет метод YourModel::data сразу после вставки пустых строк. Вам не нужно выполнять какие-либо дополнительные операции. View заботится о том, чтобы «заполнить» его.

Переопределение метода YourModel::setData в основном используется для взаимодействия между представлением и моделью, когда пользователь хочет изменить вид данных в виде виджета.

1

Я предполагаю, что mD и insertRows являются членами пользовательского класса модели.

insertRows не получает информацию о содержании вставленных строк. Пустые значения должны быть вставлены. Строки должны быть заполнены данными в реализации виртуального метода setData.

Смежные вопросы