2013-05-02 104 views
0

我已經創建了一個自定義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)) 

回答

1

直接在CSS樣式中使用的顏色的「名」是這樣的:

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

你已經發現了,有沒有getColor(),只是color()。 Qt中的API約定與Java和Python中常見的不同。