Qt 如何在QStyledItemDelegate中绘制正确的文本颜色
我想绘制一个自定义项委托,它遵循当前样式。但“WindowsVista/7”样式和“WindowsClassic”文本颜色之间存在差异 我使用以下代码绘制背景(工作): 如何以正确的颜色绘制文本 我不能使用Qt 如何在QStyledItemDelegate中绘制正确的文本颜色,qt,qt5,qstyle,qstyleditemdelegate,Qt,Qt5,Qstyle,Qstyleditemdelegate,我想绘制一个自定义项委托,它遵循当前样式。但“WindowsVista/7”样式和“WindowsClassic”文本颜色之间存在差异 我使用以下代码绘制背景(工作): 如何以正确的颜色绘制文本 我不能使用style->drawControl(QStyle::CE_ItemViewItem,&opt,painter,opt.widget)绘制整个项目,因为我必须绘制多个特殊文本,而不是一行文本。(此功能将正确绘制颜色。) 我尝试了style->drawItemText(painter,opt.
style->drawControl(QStyle::CE_ItemViewItem,&opt,painter,opt.widget)代码>绘制整个项目,因为我必须绘制多个特殊文本,而不是一行文本。(此功能将正确绘制颜色。)
我尝试了style->drawItemText(painter,opt.rect,opt.displayAlignment,opt.palete,true,“helloworld!”)代码>但它总是画黑色。对于painter->drawText()
,我不知道如何设置正确的笔颜色。forQStyle::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);
如果只需要为文本着色,可以避免使用项委托,并将qabstractemmodel::setData()
与Qt::ForegroundRole
一起使用。我不想使用特定的文本颜色绘制文本。我想用当前样式的文本颜色绘制文本。当前样式是什么?显示你的QS。我没有QS。我只想为“Windows Vista/7”主题将所选项目的文本绘制为黑色,为“Windows classic”主题将其绘制为白色,如问题中的图像。(当然,它应该适用于所有其他操作系统…)
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);