Название: Как использовать QSortFilterProxyModel совместно с видом? Отправлено: xintrea от Май 11, 2015, 22:13 У меня есть проект, в котором до недавнего времени использовалась модель RecordTableModel, расширенная от класса QAbstractTableModel. У этой модели, помимо переопределенных стандартных методов, были добавлены дополнительные методы, которые упрощали взаимодействие вида и модели:
Код: void RecordTableModel::setTableData(RecordTableData *rtData) Теперь пришло время сделать возможность сортировки в виде. Для этого модель RecordTableModel надо заменить на QSortFilterProxyModel. Внутри вида я создаю объект типа RecordTableModel, создаю объект типа QSortFilterProxyModel, устанавливаю для прокси-модели исходную модель через setSourceModel(), и начинаю пытаться использовать объект класса QSortFilterProxyModel: Код: // Было Но оказывается, что класс QSortFilterProxyModel не умеет вызывать методы класса Source-модели, заданной через setSourceModel(). Как же мне теперь управляться с данными через прокси-модель? Ведь в ней недоступны методы основной модели. Я пытался применить множественное наследование, создав класс, унаследованный от RecordTableModel и QSortFilterProxyModel. Но у QAbstractTableModel (от которого унаследован RecordTableModel) и QSortFilterProxyModel есть одинаковые методы, и скомпилировать такой код не получается. Название: Re: Как использовать QSortFilterProxyModel совместно с видом? Отправлено: PimenS от Май 11, 2015, 23:32 Как же мне теперь управляться с данными через прокси-модель? Ведь в ней недоступны методы основной модели. Я пытался применить множественное наследование, создав класс, унаследованный от RecordTableModel и QSortFilterProxyModel. Но у QAbstractTableModel (от которого унаследован RecordTableModel) и QSortFilterProxyModel есть одинаковые методы, и скомпилировать такой код не получается. QSortFilterProxyModel нужна только для сортировки и(или) фильтрации. С данными можно работать напрямую, только пересчитывая индексы. Немного не понял этой фразы: Цитировать Но оказывается, что класс QSortFilterProxyModel не умеет вызывать методы класса Source-модели, заданной через setSourceModel(). Зачем вызывать методы из прокси модели? Почему не вызывать их из представления? У меня тоже практически все данные которые требуют сортировки или фильтрации построены точно таким образом: Код: c_model = new sCreateElDocModel(this); Название: Re: Как использовать QSortFilterProxyModel совместно с видом? Отправлено: xintrea от Май 12, 2015, 00:09 > Немного не понял этой фразы:
> "Но оказывается, что класс QSortFilterProxyModel не умеет вызывать методы класса Source-модели, заданной через setSourceModel()" > Зачем вызывать методы из прокси модели? Почему не вызывать их из представления? Ну я просто расчитывал заменить одну модель другой (как это и положено в концепции MVC). Методы модели и вызываются из представления. Но вызываются-то они у модели, и если модель поменялась, и методов нет, то ничего не работает. Название: Re: Как использовать QSortFilterProxyModel совместно с видом? Отправлено: PimenS от Май 12, 2015, 00:15 QSortFilterProxyModel не хранит данных. Поэтому все равно нужно иметь модель с данными + прокси-модель + представление.
Цитировать Ну я просто расчитывал заменить одну модель другой Вряд ли это удобно. Теоретически можно конечно и QSortFilterProxyModel использовать для хранения данных, но дорого. |