Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 如何在QStyledItemDelegate中绘制正确的文本颜色_Qt_Qt5_Qstyle_Qstyleditemdelegate - Fatal编程技术网

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

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.

我想绘制一个自定义项委托,它遵循当前样式。但“WindowsVista/7”样式和“WindowsClassic”文本颜色之间存在差异

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

如何以正确的颜色绘制文本

我不能使用
style->drawControl(QStyle::CE_ItemViewItem,&opt,painter,opt.widget)绘制整个项目,因为我必须绘制多个特殊文本,而不是一行文本。(此功能将正确绘制颜色。)

我尝试了
style->drawItemText(painter,opt.rect,opt.displayAlignment,opt.palete,true,“helloworld!”)但它总是画黑色。对于
painter->drawText()
,我不知道如何设置正确的笔颜色。

for
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);

如果只需要为文本着色,可以避免使用项委托,并将
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);