У меня есть пользовательская иерархическая модель, унаследованная от QAbstractModelItem. Кроме того, я реализую MySortFilterProxyModel, разделенную на подклассы из QSortFilterProxyModel. MySortFilterProxyModel может удалять и менять столбцы. Если первый столбец в MySortFilterProxyModel соответствует первому столбцу в модели, все работает нормально. Но если его поменять в прокси-модели, то возникнут некоторые проблемы с представлением: MySortFilterProxyModel :: hasChildren работает нормально, поэтому на верхнем уровне у меня есть «+» рядом с элементами, имеющими потомков. Но когда я пытаюсь развернуть его - никакие дочерние элементы не отображаются.
Вот некоторые методы MySortFilterProxyModel:
bool MySortFilterProxyModel::hasChildren(const QModelIndex &parent) const
{
if (parent.isValid() && parent.column() != 0)
return false;
QModelIndex source_parent = mapToSource(parent);
return sourceModel()->hasChildren( source_parent.sibling(source_parent.row(), 0) );
}
int MySortFilterProxyModel::rowCount(const QModelIndex &parent) const
{
if (parent.isValid() && parent.column() != 0)
return 0;
QModelIndex source_parent = mapToSource(parent);
return sourceModel()->rowCount( source_parent.sibling(source_parent.row(), 0) );
}
Во время разбора я обнаружил, что MySortFilterProxyModel :: rowCount возвращает правильные данные. Но также я заметил, что MyModel :: rowCount вызывается не через MySortFilterProxyModel :: rowCount, а из QSortFilterProxyModel :: index (). Пехарпс, это проблема?
Итак, конкретный вопрос: как правильно реализовать прокси-модель для замены и отключения столбцов в иерархической модели?
Помогите, пожалуйста, решить проблему. Спасибо.