Удаление строк из производного класса QAbstractTableModel не работает, почему? - PullRequest
1 голос
/ 27 марта 2011

У меня есть приложение Qt, для которого я получил свой собственный класс модели из QAbstractTableModel . Я реализовал необходимые методы, как указано в документации 1004 *. Когда я вызываю метод removeRows , изменения корректны в моем представлении (удаляются строки, которые я хотел удалить).

Но почему-то операции над моделью, похоже, не распространяются на QList, который я использую в модели для хранения своих данных. Когда я сохраняю значения, хранящиеся в QList, на диск, похоже, что ничто не было стерто с него с помощью removeRows.

Вот как выглядит моя реализация removeRows (она основана на коде из книги Расширенное программирование на Qt , Глава 3, с.125):

bool MyModel::removeRows(int row, int count, const QModelIndex&)
{
    beginRemoveRows( QModelIndex(), row, row + count - 1);

    for (int i = 0; i < count; ++i) {
        mMyQList.removeAt(row);
    }

    endRemoveRows();

    return true;
}

Как мне это исправить? Что я пропустил?

Спасибо!

Ответы [ 2 ]

1 голос
/ 27 марта 2011

Как подразумевает Фрэнк О., трудно понять, что происходит, не видя некоторого кода. Но, судя по всему, значения не были удалены из QList просто потому, что вы их не удалили. Когда вы переходите от Widget к классам Model / View, вы должны сделать это самостоятельно. Т.е. в вашем методе removeRows () вы должны удалить строки из QList «вручную».

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

Оказывается, ничего не случилось с моей реализацией removeRows.

Метод сохранения был вызван моими модульными тестами перед показом моего диалога. Диалог вообще не вызывал метод сохранения.

Не удивительно, что изменения были видны в представлении, а не в выходном файле ...

...