У меня есть графический интерфейс с QDockwidget
, и я хотел бы, чтобы цвет строки заголовка виджетов док-станции менял цвет, если пользователь наводит курсор над ним с помощью курсора мыши.У меня есть небольшая тестовая программа ниже, где строка заголовка меняет цвет, когда курсор находится над ней.Тем не менее, он также меняет цвет, если курсор находится над остальной частью виджета закрепления.Есть ли способ исправить это?
CSS = """
QDockWidget::title {
background-color: lightblue;
border: 1px solid black;
}
QDockWidget::title:hover {
background: yellow;
}
QMainWindow::separator {
background: palette(Midlight);
}
QMainWindow::separator:hover {
background: palette(Mid);
}
"""
from PyQt5 import QtWidgets
from PyQt5.QtCore import Qt, QSize
class CenteredLabel(QtWidgets.QWidget):
def __init__(self, text, parent=None):
super().__init__(parent=parent)
self.verLayout = QtWidgets.QVBoxLayout()
self.setLayout(self.verLayout)
self.horLayout = QtWidgets.QHBoxLayout()
self.verLayout.addLayout(self.horLayout)
self.label = QtWidgets.QLabel(text)
self.horLayout.addWidget(self.label)
def sizeHint(self):
return QSize(300, 400)
class MyWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super().__init__(parent=parent)
self.setCentralWidget(CenteredLabel("Central Widget"))
self.dockWidget = QtWidgets.QDockWidget("Dock Title", parent=self)
self.dockWidget.setWidget(CenteredLabel("Dock Widget"))
self.addDockWidget(Qt.LeftDockWidgetArea, self.dockWidget)
def main():
app = QtWidgets.QApplication([])
# Fusion style is the default style on Linux
app.setStyle(QtWidgets.QStyleFactory.create("fusion"))
app.setStyleSheet(CSS)
win = MyWindow()
win.show()
win.raise_()
app.exec_()
if __name__ == "__main__":
main()
PS Я установил стиль приложения Qt на fusion
, который полностью настраивается с помощью палитр (в отличие, например, от стиля macintosh
).Я предпочитаю решение, которое работает со всеми стилями Qt, но если это невозможно, я могу рассмотреть возможность установки стиля моего приложения на fusion
на всех платформах.