LINUX.ORG.RU

[Qt] AlternatingRowColors и delegate


0

0

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

Ответ на: комментарий от 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 ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.