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