You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 10:03:16