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



  • Здравствуйте, господа!

    Имеется кастомная иерархическая модель, унаследованная от QAbstractModelItem. Написана своя прокси модель. Наследовался от QSortFilterProxyModel'и (переопределил методы: data, setData, headerData, mapToSource, mapFromSource, hasChildren, rowCount). Помимо функциональности QSortFilterProxyModel она также умеет выкидывает некоторые столбцы, а также меняет местами оставшиеся. Все работает, если нулевой столбец из исходной модели соответствует нулевому столбцу в прокси-модели. Если же прокси-модель перемещает этот столбец, то отображение некорректно: Стрелочки (или крестики) рисуются правильно - напротив тех элементов, у которых есть потомки. Но при попытке раскрыть такой элемент оказывается, что внутри нет элементов.
    Вот некоторые методы прокси-модели:

    @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 возвращает правильное количество столбцов. Но также замечен вызов метода rowCount исходной модели, минуя вызов MySortFilterProxyModel::rowCount. Это происходит, когда View вызывает QSortFilterProxyModel::index(). Может быть проблема связана с этим?

    Буду рад вашей помощи. Спасибо.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.