Windows QListWidget如何设置黑色或白色选定文本?
标准QListWidget在Windows XP上绘制选定行的白色文本,在Windows 7/8上绘制选定行的黑色文本。它在哪里变成黑色或白色 我为ListView创建了一个自定义委托,并尝试在选定的行中绘制文本,但应用程序调色板返回相同的颜色HighlightedText、BrightText、WindowText、WinXP和8上的文本,而默认委托以某种方式将其绘制为黑色或白色。我查看了Qt源代码,找不到它在哪里得到对比色。QListWidget样式本身在所有平台上也返回相同颜色的ForegroundRole 我是否缺少在Qt应用程序中获得正确操作系统调色板的方法?对于QListWidget,它有点复杂。 从最低优先级设置开始: 每个QWidget都有一个包含不同状态和项目的颜色集,这取决于它是否工作的风格和平台——通常是这样。 可以覆盖调色板,您可以使用文本格式的CSS设置这些颜色。 数据模型可以提供颜色使用接受。Windows QListWidget如何设置黑色或白色选定文本?,windows,qt,colors,highlight,qlistwidget,Windows,Qt,Colors,Highlight,Qlistwidget,标准QListWidget在Windows XP上绘制选定行的白色文本,在Windows 7/8上绘制选定行的黑色文本。它在哪里变成黑色或白色 我为ListView创建了一个自定义委托,并尝试在选定的行中绘制文本,但应用程序调色板返回相同的颜色HighlightedText、BrightText、WindowText、WinXP和8上的文本,而默认委托以某种方式将其绘制为黑色或白色。我查看了Qt源代码,找不到它在哪里得到对比色。QListWidget样式本身在所有平台上也返回相同颜色的Foreg
如果您提供一名代表,则您负责处理颜色,如果我找到一些颜色图案,我将给您一个链接。不幸的是,并非所有颜色都可以通过Qpalete读取。特别是对于QAbstratemView子类列表视图、树视图…,Windows样式通过WinAPI检索颜色,并直接使用它们进行绘制 所有相关代码应位于qtbase/src/widgets/styles/qwindowsxpstyle.cpp和qtbase/src/widgets/styles/qwindowsvistastyle.cpp中,搜索pGetThemeColor” 正如Marek所说,对于其中一些颜色,可以覆盖这些默认值,但不可能通过Qt API读取它们。谢谢 无论如何,事实证明QListWidget/View委托实际上并没有绘制文本——它要求style绘制本机控件,并在Qt主题引擎的深处绘制对比文本。若画笔和画笔与默认调色板中的相同,则其颜色可能会更改为os主题。 本地绘图为我解决了文本颜色问题
void customDelegate::paint(QPainter *painter,
const QStyleOptionViewItem &option, const QModelIndex &index) const
{
// ...
QStyleOptionViewItemV4 opt = option;
opt.state = opt.state & (~QStyle::State_HasFocus); // no dots
opt.displayAlignment = Qt::AlignVCenter | Qt::AlignLeft; // or right
opt.features = QStyleOptionViewItemV2::HasDisplay;
opt.text = displayText(textGoesThere, opt.locale); // <--
opt.rect = option.rect;
//...
if (multipartDrawing) {
if (drawingSomethingAtLeft)
opt.viewItemPosition = QStyleOptionViewItem::Beginning;
else if (somethingAtRight)
opt.viewItemPosition = QStyleOptionViewItem::End;
else
opt.viewItemPosition = QStyleOptionViewItem::Middle;
}
else opt.viewItemPosition = QStyleOptionViewItem::OnlyOne;
owner->style()->drawControl(QStyle::CE_ItemViewItem, &opt, painter);
//...
}
谢谢,这正是正确的答案。。。这对我设置正确的颜色没有帮助。我了解默认代理的作用,并且使用样式的本机绘图解决了我的文本颜色问题。看起来代理并不是真正负责处理颜色-主题引擎发挥了最大的魔力,所以使用样式->绘图控件是最佳的。手动设置颜色可能只在具有单个主题的单个操作系统上看起来不错。