基于父QTableWidget的selected伪状态设置cellWidget样式的问题
问题本质
Qt 样式表中::item属于父QTableWidget的内置子控制元素,仅用于描述父表格自身单元格的绘制规则。通过setCellWidget插入的嵌套QTableWidget是独立的控件实例,不属于父表格的item绘制体系,QSS解析器不支持通过父表格item的伪状态作为选择器前缀匹配内部独立控件的样式,因此你尝试的两种写法都无法实现预期效果。
实现方案
最稳定的实现方式是监听父表格的选中状态变化,手动切换对应行嵌套控件的样式,具体实现如下:
- 父QTableWidget初始化时绑定选中变化信号
# 放在父表格的__init__方法末尾即可 self.itemSelectionChanged.connect(self.update_selected_row_style)
- 实现选中状态更新方法
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)
- 调整QSS规则
/* 父表格选中样式 */ MainTable::item:selected { background: yellow; color: purple; } /* 嵌套表格选中样式,如果你嵌套的表格处于禁用状态,可在后面补充:disabled伪状态 */ StatsTable[rowSelected="true"], StatsTable[rowSelected="true"]::item { background: yellow; color: purple; }
内容的提问来源于stack exchange,提问作者Meowf
相关产品推荐
相关产品推荐

