У меня есть проект, в котором до недавнего времени использовалась модель
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 есть одинаковые методы, и скомпилировать такой код не получается.