0

QWidgetAction2 つのメニュー オプションを提供するカスタムを作成しました。テキストと削除アイコン。

スタイルシートでハイライトの色を簡単に制御できますが: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))
4

1 に答える 1

1

CSS スタイルで直接使用される色の「名前」は次のとおりです。

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

がないことはすでにわかっていますgetColor()が、 だけcolor()です。Qt の API 規則は、Java および Python で一般的なものとは異なります。

于 2013-05-03T11:21:50.477 に答える