如何获取或设置QWidget的原生高亮颜色?

问题描述:

我已经创建了一个自定义QWidgetAction来提供两个菜单选项;一些文字和一个删除图标。如何获取或设置QWidget的原生高亮颜色?

我可以通过样式表中的:hover轻松控制突出显示颜色,但我不想对颜色进行硬编码。我想为当前环境使用本机颜色。

如何从调色板查询默认值?

我发现QPalette.setColor(),我希望找到一个类似的QPalette.getColor(),但这并不存在。

下面是一些示例代码,可以解释我如何应用我的突出显示。

class PreferenceAction(QtGui.QWidgetAction): 
    def __init__(self, prefFile, parentMenu, *args, **kw): 
     QtGui.QWidgetAction.__init__(self, parentMenu, *args, **kw) 

     self.parentMenu = parentMenu 
     self.prefFile = prefFile 
     self.prefName = os.path.basename(prefFile)[:-5].replace("_",' ') 

     myWidget = QtGui.QWidget() 
     myLayout = QtGui.QHBoxLayout() 
     myLayout.setSpacing(0) 
     myLayout.setContentsMargins(0, 0, 0, 0) 
     myWidget.setLayout(myLayout) 
     myLabel = ExtendedQLabel(self.prefName) 
     myIcon = ExtendedQLabel() 
     myIcon.setPixmap(QtGui.QPixmap(TRASH_ICON)) 
     myLayout.addWidget(myLabel, stretch=1) 
     myLayout.addWidget(myIcon, stretch=0) 
     myWidget.setStyleSheet("QWidget:hover { background:#3399ff; color: white;} QWidget { padding: 4px;}") 

     self.connect(myLabel, QtCore.SIGNAL('clicked()'), self.loadPreference) 
     self.connect(myIcon, QtCore.SIGNAL('clicked()'), self.deletePreference) 

     self.setDefaultWidget(myWidget) 

    def loadPreference(self): 
     print "loading preference %s" % self.prefFile 
     self.parentMenu.hide() 

    def deletePreference(self): 
     print "deleting preference %s" % self.prefFile 
     self.parentMenu.hide() 

class ExtendedQLabel(QtGui.QLabel): 

    def __init(self, parent): 
     QtGui.QLabel.__init__(self, parent) 

    def mouseReleaseEvent(self, ev): 
     self.emit(QtCore.SIGNAL('clicked()')) 


更新: 我发现这个选项。这不是超级漂亮,但它的作品。

defaultHLBackground = "#%02x%02x%02x" % myWidget.palette().highlight().color().getRgb()[:3] 
defaultHLText = "#%02x%02x%02x" % myWidget.palette().highlightedText().color().getRgb()[:3] 

myWidget.setStyleSheet("QWidget:hover { background:%s; color: %s;} QWidget { padding: 4px;}" % (defaultHLBackground,defaultHLText)) 

直接在CSS样式中使用的颜色的“名”是这样的:

yourWidget.palette().highlight().color().name() 

你已经发现了,有没有getColor(),只是color()。 Qt中的API约定与Java和Python中常见的不同。