У меня возникли трудности с добавлением делегата в мой QTreeView. Я добавил некоторые QStandardItems через модель, которая отлично работает, но когда я добавляю делегата, текст стирается, и только значки видны.
Это код, который я использую для своего делегата:
void SeqNavDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
const QModelIndex &index) const
{
if (index.column() == 0 && option.state & QStyle::State_Enabled)
{
const QIcon icon(QLatin1String(":/SeqNavMenu/images/green.png"));
QRect iconRect(option.rect.right() - option.rect.height(),
option.rect.top(),
option.rect.height(),
option.rect.height());
icon.paint(painter, iconRect, Qt::AlignRight);
}
}
То, что я хотел бы сделать, это объединить два, то есть иметь текст и флажки, а справа - значки, которые я разместил в делегате.
Может быть, кто-то может указать мне в правильном направлении здесь?
Приветствия.
Когда вы назначаете делегата представлению, представление останавливает объекты рендеринга сами по себе (фактически оно делает это с другим делегатом, который заменяется вашим). Поэтому он делегирует вам рендеринг. И вы запросили делегата только рисовать значки. Вот почему вы видите только значки.
Если вам нужно сделать флажок и текст, а вы должны сделать это самостоятельно или вызвать метод предков paint
где - то в вашей реализации. Итак, если вы унаследовали SeqNavDelegate
от QStyledItemDelegate
звоните:
QStyledItemDelegate::paint(painter, option, index);
QAbstractItemView::viewOptions
и изменитеoption.decorationPosition
наQStyleOptionViewItem::Right
тогда вам вообще не нужно будет использовать делегат. Вам нужно только вернуть значок вdata
методе модели , когдаDecorationRole
запрашиваются.