QTreeView не показывает заголовок
Я показываю TreeView с пользовательской моделью sortfilterproxymodel (которая принимает другую пользовательскую модель в качестве источника) и пользовательским делегатом (перезаписанный paint), чтобы повлиять на отображение каждого элемента.
Однако я не могу получить заголовок TreeView, чтобы показать. Я посмотрел как на прокси, так и на нормальную модель, и у обоих есть вызов headerData() и возврат правильных значений. Я не скрываю явно заголовок. На самом деле, я явно показываю () заголовок TreeView и setHeaderHidden () в false.
Что может привести к тому, что заголовок не будет показан?
Вот функция paint () делегата, так как я подозреваю ошибку где-то там:
//---------------------------------------------------------------------------------
void
MyDelegate::paint(QPainter* p_painter, const QStyleOptionViewItem& p_option, const QModelIndex& p_index) const
{
// Get a custom text
QString text = "";
// Code that changes the text variable, nothing fancy, no pre-mature return
// Left out for convenience
// Call painter methods for drawing
p_painter->save();
p_painter->setClipRect(p_option.rect);
drawBackground(p_painter, p_option, p_index);
drawDisplay(p_painter, p_option, p_option.rect, text);
drawFocus(p_painter, p_option, p_option.rect);
p_painter->restore();
}
Если вам интересно, почему я делаю все эти вещи художника (save (), drawBackground и т. д.) вручную, потому что это, кажется, единственный способ изменить отображаемый текст внутри функции paint (). По крайней мере, единственный, кого я смог вычислить. Но я не знаю, имеет ли это какое-то отношение к заголовку. показывается в представлении.
Edit: к настоящему времени я попытался заменить свою собственную краску на краску по умолчанию. Заголовок все еще не показан, поэтому метод paint() кажется невинным ;)
1 ответ:
Проблема заключалась в том, что я "забыл" добавить в начало функции headerData() следующее:
Хотя я должен сказать, что это немного странно, что у вас должны быть эти строки, чтобы отобразить что-либо вообще. Если они требуются таким образом, почему бы не сделать эту проверку перед вызовом headerData ()?if (role != Qt::DisplayRole) return QVariant();
В любом случае, я надеюсь, что это может помочь некоторым людям с той же проблемой:)