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

基于父QTableWidget的selected伪状态设置cellWidget样式的问题

问题本质

Qt 样式表中::item属于父QTableWidget的内置子控制元素,仅用于描述父表格自身单元格的绘制规则。通过setCellWidget插入的嵌套QTableWidget是独立的控件实例,不属于父表格的item绘制体系,QSS解析器不支持通过父表格item的伪状态作为选择器前缀匹配内部独立控件的样式,因此你尝试的两种写法都无法实现预期效果。

实现方案

最稳定的实现方式是监听父表格的选中状态变化,手动切换对应行嵌套控件的样式,具体实现如下:

  1. 父QTableWidget初始化时绑定选中变化信号
# 放在父表格的__init__方法末尾即可
self.itemSelectionChanged.connect(self.update_selected_row_style)
  1. 实现选中状态更新方法
def update_selected_row_style(self):
    for row in range(self.rowCount()):
        stats_table = self.cellWidget(row, self.STATSCOL)
        if not stats_table:
            continue
        # 标记当前行是否选中
        is_selected = self.isRowSelected(row)
        stats_table.setProperty("rowSelected", is_selected)
        # 触发样式重绘
        stats_table.style().unpolish(stats_table)
        stats_table.style().polish(stats_table)
  1. 调整QSS规则
/* 父表格选中样式 */
MainTable::item:selected {
  background: yellow;
  color: purple;
}
/* 嵌套表格选中样式,如果你嵌套的表格处于禁用状态,可在后面补充:disabled伪状态 */
StatsTable[rowSelected="true"], 
StatsTable[rowSelected="true"]::item {
  background: yellow;
  color: purple;
}

内容的提问来源于stack exchange,提问作者Meowf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:27:03