Задать вопрос
webhamster
@webhamster

Qt: Как использовать QSortFilterProxyModel совместно с видом?

У меня есть проект, в котором до недавнего времени использовалась модель RecordTableModel, расширенная от класса QAbstractTableModel. У этой модели, помимо переопределенных стандартных методов, были добавлены дополнительные методы, которые упрощали взаимодействие вида и модели:

void RecordTableModel::setTableData(RecordTableData *rtData)
RecordTableData *RecordTableModel::getTableData(void)
int RecordTableModel::addTableData(int mode,
                                   int pos,
                                   QMap<QString, QString> fields,
                                   QString text,
                                   QMap<QString, QByteArray> files)
void RecordTableModel::removeRowsByList(QVector<int> delIdx)


Теперь пришло время сделать возможность сортировки в виде. Для этого модель RecordTableModel надо заменить на QSortFilterProxyModel. Внутри вида я создаю объект типа RecordTableModel, создаю объект типа QSortFilterProxyModel, устанавливаю для прокси-модели исходную модель через setSourceModel(), и начинаю пытаться использовать объект класса QSortFilterProxyModel:

// Было
 recordModel=new RecordTableModel();
 setModel(recordModel);

 ...

 // Стало
 recordSourceModel=new RecordTableModel();

 recordModel=new QSortFilterProxyModel();
 recordModel->setSourceModel(recordSourceModel);

 setModel(recordModel);


Но оказывается, что класс QSortFilterProxyModel не умеет вызывать методы класса Source-модели, заданной через setSourceModel().

Как же мне теперь управляться с данными через прокси-модель? Ведь в ней недоступны методы основной модели. Я пытался применить множественное наследование, создав класс, унаследованный от RecordTableModel и QSortFilterProxyModel. Но у QAbstractTableModel (от которого унаследован RecordTableModel) и QSortFilterProxyModel есть одинаковые методы, и скомпилировать такой код не получается.
  • Вопрос задан
  • 4508 просмотров
Подписаться 2 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Разработчик на C++
    12 месяцев
    Далее
  • Яндекс Практикум
    Разработчик C++
    9 месяцев
    Далее
  • Skillbox
    Профессия Разработчик С++
 с нуля + ИИ
    7 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
Demonist
@Demonist
А Вам и не нужно управлять данными через прокси-модель. Делайте это напрямую с RecordTableModel, а QSortFilterProxyModel будет лишь сортировать.
Поймите, данные должны храниться только в модели (т.е. в RecordTableModel) и именно она должна с ними работать, и больше никто. QSortFilterProxyModel в таком случае будет толкьо менять формат отображения этих данных, но не сами данные.

Рекомендую подтянуть знания касательно моделей. Сделать это можно, например, здесь.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
Uniscan Research Новосибирск
от 140 000 до 200 000 ₽
АО НПП «АМЭ» Санкт-Петербург
До 250 000 ₽
Базис-Центр Коломна
от 70 000 до 500 000 ₽