您可以使用 descendant css selector,它可用于指定一个小部件的样式,该小部件是另一个小部件的后代(它可以是直接子代、“孙子代”等) .
如果项目具有字符串值,通常使用 QLineEdit 编辑项目视图,解决方案是使用QTableWidget QLineEdit,并且由于样式将相同,您还可以使用逗号连接选择器:
self.grid.setStyleSheet('''
QTableWidget::item::selected, QTableWidget QLineEdit {
background-color: #F9F6F5;
color: black;
border: 3px solid black;
}
''')
请注意,您需要后代选择器,而不是 子选择器 (parent > child),它仅适用于 直接子代:项目视图的编辑器不是视图的直接子视图,因为项目视图具有以下层次结构:
项目视图 -> 视口(可滚动的内容) -> 编辑器
如果您在表格小部件上设置样式表,甚至不需要后代选择器,因为它会自动应用于作为应用 css 的小部件的子小部件的所有小部件。
如果Qt.DisplayRole(或更准确地说,Qt.EditRole)使用了其他数据类型,则应根据类型使用相对小部件:例如,如果将值设置为整数, QSpinBox 将被使用,所以选择器将是QTableWidget QSpinBox。
除了字符串和 bool(使用 QComboBox)之外,所有其他标准编辑小部件都是 QAbstractSpinBox 的子类,因此您可以改用该父类(在以下示例中,我假设 self.grid 是 QTableWidget) :
self.grid.setStyleSheet('''
QTableWidget::item::selected,
QLineEdit, QComboBox, QAbstractSpinBox {
...
}
''')
如果样式表设置在父级(例如,主窗口,甚至整个应用程序)上,您仍然需要后代选择器:
class MyMainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
# ...
self.setStyleSheet('''
QTableWidget::item::selected,
QTableWidget QLineEdit,
QTableWidget QComboBox,
QTableWidget QAbstractSpinBox {
...
}
''')