如何在QStyledItemDelegate中绘制正确的文本颜色

时间:2014-08-06 09:02:42

标签: qt qt5 qstyle qstyleditemdelegate

我想绘制一个自定义项目委托,它遵循当前的样式。但是" WindowsVista / 7"之间存在差异。风格和" WindowsClassic"用于文字颜色。

difference between winViste/7 and winClassic

我使用以下代码绘制背景(工作):

void FriendItemDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const
{
    painter->save();

    QStyleOptionViewItem opt = option;
    initStyleOption(&opt, index);
    QStyle *style = opt.widget ? opt.widget->style() : QApplication::style();
    QSize hint = sizeHint(opt, index);

    style->drawPrimitive(QStyle::PE_PanelItemViewItem, &opt, painter, opt.widget);
    ...
}

如何以正确的颜色绘制文字?

我无法使用style->drawControl(QStyle::CE_ItemViewItem, &opt, painter, opt.widget);绘制整个项目,因为我必须绘制比一个文本行更多的特殊文本。 (此功能可正确绘制颜色。)

我尝试使用style->drawItemText(painter, opt.rect, opt.displayAlignment, opt.palette, true, "Hello World!");,但它总是涂成黑色。对于painter->drawText(),我不知道如何设置正确的笔颜色。

1 个答案:

答案 0 :(得分:3)

QStyle::drawItemText的{​​{3}}说:

  

如果指定了显式的textRole,则使用。来绘制文本   调色板的颜色为给定角色。

您可以在委托paintEvent中使用此类似的内容:

QString myText = ...;

QPalette::ColorRole textRole = QPalette::NoRole;
if (option.state & QStyle::State_Selected)
{
    textRole = QPalette::HighlightedText;
}

qApp->style()->drawItemText(painter, opt.rect, opt.displayAlignment, 
                            opt.palette, true, myText, textRole);