2016-02-23 3 views
0

Я использую QTableView и QStandardItemModel, и я пытаюсь покрасить строку с оставшимся черным шрифтом.QTableView, устанавливая шрифт ячейки и цвет фона

Я использую метод рисования моего делегата класса,:

void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const 
{ 
    QBrush brush(Qt::red, Qt::SolidPattern); 
    painter->setBackground(brush); 
} 

Это не работает на всех, и это делает текст внутри каждой ячейки прозрачным. Что я здесь делаю неправильно?

[EDIT] Я также использовал painter->fillRect(option.rect, brush);, но он делает фон ячейки и текст того же цвета.

+2

Вам не нужно использовать делегат. Просто попробуйте 'QStandardItem :: setData()' с функциями 'Qt :: FontRole' и' Qt :: BackgroundColorRole'. – vahancho

+0

он не делает текст прозрачным, он не окрашен, так как ваша реализация ничего не делает. Ваш класс «Делегат» наследует что-то полезное? –

+0

Я добавил функцию 'drawDisplay()' в сочетании с 'fillRect()', которая, похоже, делает то, что я хочу, крашу фон и сохраняю текст черным – ethane

ответ

2

Ваш Delegate должен наследовать QStyledItemDelegate.

Ваше событие краска, вероятно, должен выглядеть следующим образом:

void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const 
{ 
    QStyleOptionViewItem op(option); 

    if (index.row()==2) { 
     op.font.setBold(true); 
     op.palette.setColor(QPalette::Normal, QPalette::Background, Qt::Black); 
     op.palette.setColor(QPalette::Normal, QPalette::Foreground, Qt::White); 
    } 
    QStyledItemDelegate::paint(painter, op, index); 
} 
+0

Спасибо @Marek R – ethane

0

Как vahancho предложил, вы можете использовать QStandardItem::setData() функцию:

QStandardItem item; 
item.setData(QColor(Qt::green), Qt::BackgroundRole); 
item.setData(QColor(Qt::red), Qt::FontRole); 

Или QStandardItem::setBackground() и QStandardItem::setForeground() функции:

QStandardItem item; 
item.setBackgroundColor(Qt::green); 
item.setForegroundColor(Qt::red); 
Смежные вопросы