Неправильное представление пользовательской иерархической модели при установке прокси-модели, которая подменяет столбцы

У меня есть пользовательская иерархическая модель, унаследованная от 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(). В чем проблема?

Итак, конкретный вопрос: Как правильно реализовать прокси-модель для замены и отключения колонок в иерархической модели?

Помогите, пожалуйста, решить проблему. Спасибо.

5
задан typbl4 2 December 2011 в 14:14
поделиться