2012-03-24 2 views
0

У меня есть функция addFile в классе TableModel, который вставляет новую запись в конец.QAbstactTableModel insert наверх

void TableModel::addFile(const QString &path) 
{ 
    beginInsertRows(QModelIndex(), list.size(),list.size()); 
    TableItem item; 
    item.filename = path; 
    QFile file(path); 
    item.size = file.size(); 
    item.status = StatusNew; 
    list << item; 
    endInsertRows(); 
} 

Эта функция работает нормально, но вместо добавления записи в конце я хотел бы вставить ее вверху. Любые указатели на то, как обновить мою существующую функцию?

Я уже пробовал некоторые комбинации, но нет удачи.

+0

Вы хотите, чтобы просто отобразить элемент, вставленный в начале, или вы хотите, чтобы список заказывается, что слишком? – Gangadhar

+0

оба - поскольку существующий код обрабатывает оба – Hiren

ответ

0

Спасибо всем за ответ. Я нашел решение по моей:

В случае, если кто-то заинтересован

void TableModel::addFile(const QString &path) 
{ 
    beginInsertRows(QModelIndex(), list.size(), list.size()); 
    TableItem item; 
    item.filename = path; 
    QFile file(path); 
    item.size = file.size(); 
    item.status = StatusNew; 
    list << item; // Why Assign first? Maybe not required 
    for (int i = list.size() - 1; i > 0; i--) 
    { 
     list[i] = list[i-1]; 
    } 
    list[0] = item; // set newly added item at the top 
    endInsertRows(); 
} 
0

Для отображения вы можете попробовать delegates, как объяснено в ссылке (я не пробовал пример, хотя). Это поможет сообществу, если вы сможете добавить свои наблюдения.

3

Есть две вещи, которые вам нужно сделать. Сначала нужно настроить вызов на beginInsertRows. Потому что именно здесь мы говорим модели, что добавляем строки, куда они будут идти, и сколько мы добавляем. Вот описание метода:

недействительного QAbstractItemModel :: beginInsertRows (Const QModelIndex & родителя, Int первых, внутр последнего)

Так что в вашем случае, так как вы хотите, чтобы добавить строку на первом index и только одна строка, мы передаем 0 как индекс первого элемента, а 0 - индекс последнего добавляемого элемента (поскольку мы добавляем только один элемент).

beginInsertRows(modelIndex(), 0, 0); 

Далее мы должны предоставить данные для изделия. Я предполагаю, что «список» - это QList (если он не похож). Поэтому мы хотим вызвать метод «insert».

list.insert(0, item); 

И это должно быть так.

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