LINUX.ORG.RU

[Qt] AlternatingRowColors и delegate

 


0

0

Есть обычный tableview, ему сделан setAlternatingRowColors(true), для отрисовки одного из столбцов используется свой делегат, как мне в делегате узнать, что фон надо рисовать альтернативным цветом, а не обычным?

void QAbstractItemDelegate::paint ( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const

QStyleOptionViewItem & option

panter_dsd ★★★★
()
Ответ на: комментарий от antony986

щаз вот смотрю под дебаггером, в option от строки к строке меняется только rect

antony986
() автор топика
Ответ на: комментарий от panter_dsd

да, пришлось в сорцы лезть, короче надо делать следующий финт ушами

const QStyleOptionViewItemV4 *opt = static_cast<const QStyleOptionViewItemV4*>(&option);

if (opt->features & QStyleOptionViewItemV4::Alternate)
    painter->fillRect(option.rect,option.palette.alternateBase());
else
    painter->fillRect(option.rect,painter->background());

видимо тролли считают, что об этом можно догадаться из фразы

the option will always be an instance of QStyleOptionViewItemV4.

т.е. отдают нам QStyleOptionViewItem, но на самом деле это не так ))

antony986
() автор топика
Ответ на: комментарий от antony986

а, чето я уже туплю

const QStyleOptionViewItemV4 opt = static_cast<const QStyleOptionViewItemV4>(option);
        if (opt.features & QStyleOptionViewItemV4::Alternate)
            painter->fillRect(option.rect,option.palette.alternateBase());
        else
            painter->fillRect(option.rect,painter->background());

antony986
() автор топика

Рисуй прозрачный фон да и всё... Вроде работает

ndigiti
()
Ответ на: комментарий от antony986

Что-то вы сорцы недочитали, для кастирования опций стиля существует шаблон:

if ( const QStyleOptionViewItemV4 *opt = qstyleoption_cast<const QStyleOptionViewItemV4*>(&option) )
{
    ...
}
Dendy ★★★★★
()
Ответ на: комментарий от Dendy

>qstyleoption_cast

оу, не видел, хотя и так вроде работает

antony986
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.