在Qt 4.8中,我有一个QTreeWidget
,并且树中的每个节点都根据其值对其文本进行着色(例如,成功节点为绿色文本,失败为红色)。
这很好,但是当我尝试在树中选择项目时,我遇到了问题。选择某个项目后,Qt会将所选文本的QPalette::ColorRole
设置为QPalette::HighlightedText
。默认情况下,这会导致文本颜色变为白色。在一个完美的世界里,我希望当前的选择根本不能改变文本颜色。
从文档中看,QPalette::setColor(ColorRole role, const QColor & color)
提供了一种更改突出显示文本颜色的方法,但它只能将ColorRole
设置为使用固定颜色。
有没有办法完全忽略与给定QPalette::ColorRole
相关联的文字颜色?理想情况下,我希望突出显示的文本颜色角色只留下文本颜色; QPalette::HighlightedText
根本没有与之关联的文本颜色,当文本突出显示时,它只保留其未突出显示的颜色。
有没有办法在Qt中轻松完成这项工作?我想避免继承QPalette
或QBrush
以及破解重载函数来执行此操作,但我无法在帮助我的文档中找到任何内容。
答案 0 :(得分:0)
如何更改每个节点的默认未选文本颜色(Qt::WindowText
,如果我没有记错的话)?如果您的方法包含如下代码:
palette.setColor(Qt::WindowText, color);
treeItem->setPalette(palette);
您可以随时为两个颜色角色调用setColor()
:
palette.setColor(Qt::WindowText, color);
palette.setColor(Qt::HighlightedText, color);
treeItem->setPalette(palette);
希望这有帮助!