Вставка QAbstactTableModel вверху
У меня есть функция addFile в моем классе TableModel, которая вставляет новую запись в конце.
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();
}
Эта функция работает нормально, но вместо добавления записи в конце я хотел бы вставить ее сверху. Любые указатели о том, как обновить мою существующую функцию?
Я уже попробовал несколько комбинаций, но удачи нет.
3 ответа
Спасибо всем за ответ. Я нашел решение самостоятельно:
Если кому-то интересно
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();
}
Есть две вещи, которые вам нужно сделать. Сначала нужно настроить вызов beginInsertRows. Потому что именно здесь мы говорим модели, что мы добавляем строки, куда они пойдут и сколько мы добавляем. Вот описание метода:
void QAbstractItemModel:: beginInsertRows (const QModelIndex & parent, int first, int last)
Так что в вашем случае, так как вы хотите добавить строку с первым индексом и только одну строку, мы передаем 0 в качестве индекса первого элемента и 0, который является индексом последнего элемента, который мы добавляем (потому что, конечно, мы добавляем только один элемент).
beginInsertRows(modelIndex(), 0, 0);
Далее мы должны предоставить данные для элемента. Я предполагаю, что "список" является QList (если нет, то, вероятно, похож). Поэтому мы хотим вызвать метод insert.
list.insert(0, item);
И это должно быть так.
Для отображения вы можете попробовать делегатов, как объяснено в ссылке (хотя я не пробовал пример). Это поможет сообществу, если вы можете добавить свои наблюдения.