@typbl4

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

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



Имеется кастомная иерархическая модель, унаследованная от 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()-&gt;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()-&gt;rowCount( source_parent.sibling(source_parent.row(), 0) );<br/>
}




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



Буду рад вашей помощи. Спасибо.
  • Вопрос задан
  • 2875 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы