如何让QTableView在激活与非激活状态下保持选中行颜色一致
解决QTableView在Windows 7失去焦点时选中行文本变色的问题
我之前也踩过Qt跨平台样式的坑,不同系统的样式渲染逻辑差异确实挺磨人的。你当前的CSS在Linux上正常,但Windows 7里失去焦点时文本变黑,核心原因是Windows的原生样式(比如WindowsVistaStyle)对非激活状态下的选中项文本有特殊的优先级处理——单纯给QTableView:!active设置selection-color,没法覆盖item元素级别的默认样式规则。
试试把样式调整得更精准,直接针对选中的item元素来定义非激活状态的样式:
/* 保留控件级别的背景色设置,同时针对item细化文本与背景样式 */ QTableView:!active { selection-background-color: palette(Highlight); } QTableView::item:selected:!active { color: palette(HighlightedText); background-color: palette(Highlight); }
之所以要这么写,是因为Qt在Windows平台下,QTableView::item的状态样式优先级高于控件本身的selection-color设置。直接指定selected:!active状态的item样式,就能强制覆盖系统默认的文本颜色行为。
如果上述方案还是不生效,也可以尝试直接写死颜色值(虽然用palette更适配系统主题,但极端场景下能快速验证问题):
QTableView:!active { selection-background-color: #0078d7; } QTableView::item:selected:!active { color: white; background-color: #0078d7; }
另外也可以检查一下,有没有全局设置过QTableView::item的通用样式,导致非激活状态的规则被意外覆盖。
内容的提问来源于stack exchange,提问作者Trap
相关产品推荐
相关产品推荐

