Вставка QAbstactTableModel сверху - PullRequest
0 голосов
/ 24 марта 2012

У меня есть функция 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 ]

3 голосов
/ 27 марта 2012

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

void QAbstractItemModel :: beginInsertRows (const QModelIndex & parent, int first, int last)

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

beginInsertRows(modelIndex(), 0, 0);

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

list.insert(0, item);

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

0 голосов
/ 27 марта 2012

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

На случай, если кому-то интересно

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 голосов
/ 24 марта 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...