Делегировать удаление текста в QTreeView с помощью QStandardItemModel

У меня возникли трудности с добавлением делегата в мой 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);
    }
}

То, что я хотел бы сделать, это объединить два, то есть иметь текст и флажки, а справа - значки, которые я поместил в делегате.

Может быть, кто-то может указать мне правильное направление здесь?

Ваше здоровье.


person Simpsons    schedule 21.08.2014    source источник


Ответы (1)


Когда вы назначаете делегата представлению, представление перестает отображать элементы само по себе (на самом деле оно делает это с другим делегатом, который заменяется вашим). Таким образом, он делегирует рендеринг вам. И вы запрограммировали делегата только на отрисовку значков. Вот почему вы видите только значки.
Если вам нужно нарисовать флажок и текст, вам нужно нарисовать его самостоятельно или вызвать метод предков paint где-то в вашей реализации. Итак, если вы унаследовали SeqNavDelegate от QStyledItemDelegate, вызовите:

QStyledItemDelegate::paint(painter, option, index);
person Ezee    schedule 21.08.2014
comment
@simpsons Также предлагаю вам поэкспериментировать с QStyleOptionViewItem::position. Я думаю, что если вы перереализуете QAbstractItemView::viewOptions и измените option.decorationPosition на QStyleOptionViewItem::Right, вам вообще не нужно будет использовать делегат. Вам нужно будет только вернуть значок в методе data вашей модели, когда запрашивается DecorationRole. - person Ezee; 21.08.2014