Здравстуйте, господа!
Имеется кастомная иерархическая модель, унаследованная от QAbstractItemModel. Написана своя прокси модель. Наследовался от QSortFilterProxyModel’и (переопределил методы: data, setData, headerData, mapToSource, mapFromSource, hasChildren, rowCount). Помимо функциональности QSortFilterProxyModel она также умеет выкидывает некоторые столбцы, а также меняет местами оставшиеся. Все работает, если нулевой столбец из исходной модели соответствует нулевому столбцу в прокси-модели. Если же прокси-модель перемещает этот столбец, то отображение некорректно: Стрелочки (или крестики) рисуются правильно – напротив тех элементов, у которых есть потомки. Но при попытке раскрыть такой элемент оказывается, что внутри нет элементов.
Вот некоторые методы прокси-модели:
bool MySortFilterProxyModel::hasChildren(const QModelIndex &parent) const
{<br/>
if (parent.isValid() && parent.column() != 0)<br/>
return false;<br/>
<br/>
QModelIndex source_parent = mapToSource(parent);<br/>
return sourceModel()->hasChildren( source_parent.sibling(source_parent.row(), 0) );<br/>
}<br/>
<br/>
int MySortFilterProxyModel::rowCount(const QModelIndex &parent) const<br/>
{<br/>
if (parent.isValid() && parent.column() != 0)<br/>
return 0;<br/>
<br/>
QModelIndex source_parent = mapToSource(parent);<br/>
return sourceModel()->rowCount( source_parent.sibling(source_parent.row(), 0) );<br/>
}
Причем MySortFilterProxyModel::rowCount возвращает правильное количество столбцов. Но также замечен вызов метода rowCount исходной модели, минуя вызов MySortFilterProxyModel::rowCount. Это происходит, когда View вызывает QSortFilterProxyModel::index(). Может быть проблема связана с этим?
Буду рад вашей помощи. Спасибо.