Qt 在焦点 in/out 事件上更改样式表
Qt Change stylesheet on focus in/out event
好吧,我现在感觉真的很蠢...我有一个 QTableWidget,当它有焦点时,我想更改样式表,使其成为边框 "highlights"。我可以简单地通过子类化小部件的 focusInEvent 来做到这一点,但是如果我调用 setStyleSheet()
它会覆盖我之前所做的所有样式。以清洁的名义,我试图找到只更改边框颜色而不覆盖我的其他样式的最佳方法。
请注意,我正在尝试找到对所有属性执行此操作的最佳方法。在这种情况下,我需要边框颜色,但我想我以后也会想改变其他东西。
PyQt4 中的简单示例:
class MyTableWidget(QtGui.QTableWidget):
def __init__(self):
super(MyTableWidget, self).__init__()
self.style = "QTableView {background: red; selection-background-color: green; border: 1px solid gray}" # beautiful, I know...
self.setStyleSheet(self.style)
def focusInEvent(self, event):
super(MyTableWidget, self).focusInEvent(event)
self.setStyleSheet("border-color: blue")
def focusOutEvent(self, event):
super(MyTableWidget, self).focusOutEvent(event)
self.setStyleSheet(self.style)
您可以为悬停状态和 selected/deselected 状态指定不同的样式表部分:
self.setStyleSheet(
"""
QTableView {
selection-background-color: green;
background: red;
border: 1px solid gray;
}
QTableView::item:hover:selected {
background: green;
border: 1px solid blue;
}
QTableView::item:hover:!selected {
background: red;
border: 1px solid blue;
}
""")
有了这个样式表,您根本不需要实现 focusInEvent
和 focusOutEvent
,Qt 的样式表引擎会为您处理这些事情。
刚做了类似的事情,发现 QTableView::focus 试一试 :)
class MyTableWidget(QtWidgets.QTableWidget):
def __init__(self):
super(MyTableWidget, self).__init__()
self.style = """
QTableView {
background: red;
selection-background-color: green;
border: 1px solid gray;}
QTableView::focus {border-color: blue;}"""
self.setStyleSheet(self.style)
谢谢,
马克
好吧,我现在感觉真的很蠢...我有一个 QTableWidget,当它有焦点时,我想更改样式表,使其成为边框 "highlights"。我可以简单地通过子类化小部件的 focusInEvent 来做到这一点,但是如果我调用 setStyleSheet()
它会覆盖我之前所做的所有样式。以清洁的名义,我试图找到只更改边框颜色而不覆盖我的其他样式的最佳方法。
请注意,我正在尝试找到对所有属性执行此操作的最佳方法。在这种情况下,我需要边框颜色,但我想我以后也会想改变其他东西。
PyQt4 中的简单示例:
class MyTableWidget(QtGui.QTableWidget):
def __init__(self):
super(MyTableWidget, self).__init__()
self.style = "QTableView {background: red; selection-background-color: green; border: 1px solid gray}" # beautiful, I know...
self.setStyleSheet(self.style)
def focusInEvent(self, event):
super(MyTableWidget, self).focusInEvent(event)
self.setStyleSheet("border-color: blue")
def focusOutEvent(self, event):
super(MyTableWidget, self).focusOutEvent(event)
self.setStyleSheet(self.style)
您可以为悬停状态和 selected/deselected 状态指定不同的样式表部分:
self.setStyleSheet(
"""
QTableView {
selection-background-color: green;
background: red;
border: 1px solid gray;
}
QTableView::item:hover:selected {
background: green;
border: 1px solid blue;
}
QTableView::item:hover:!selected {
background: red;
border: 1px solid blue;
}
""")
有了这个样式表,您根本不需要实现 focusInEvent
和 focusOutEvent
,Qt 的样式表引擎会为您处理这些事情。
刚做了类似的事情,发现 QTableView::focus 试一试 :)
class MyTableWidget(QtWidgets.QTableWidget):
def __init__(self):
super(MyTableWidget, self).__init__()
self.style = """
QTableView {
background: red;
selection-background-color: green;
border: 1px solid gray;}
QTableView::focus {border-color: blue;}"""
self.setStyleSheet(self.style)
谢谢, 马克