Sch*_*mpf 5 qt qstyle qt5 qstyleditemdelegate
我想绘制一个遵循当前样式的自定义项目委托。但是“ WindowsVista / 7”样式和“ WindowsClassic”样式之间的文本颜色有所不同。

我使用以下代码绘制背景(工作):
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);
...
}
Run Code Online (Sandbox Code Playgroud)
如何以正确的颜色绘制文本?
我不能style->drawControl(QStyle::CE_ItemViewItem, &opt, painter, opt.widget);用来绘制整个项目,因为我必须绘制比一行文字更多的特殊文字。(此功能可以正确绘制颜色。)
我尝试过,style->drawItemText(painter, opt.rect, opt.displayAlignment, opt.palette, true, "Hello World!");但它总是漆成黑色。对于painter->drawText(),我不知道如何设置正确的笔颜色。
文档说:QStyle::drawItemText
如果指定了显式 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);
Run Code Online (Sandbox Code Playgroud)