如何更改 QML 按钮 Qt Quick Controls 2 的背景颜色?

avi*_*iit 3 qt qml qtquickcontrols2

我只想更改 QML 按钮的背景颜色,但似乎没有简单的方法。你能告诉我一个简单的方法来改变 QML 按钮的背景颜色吗?谢谢!

更新:我搜索过的代码:

import QtQuick 2.6
import QtQuick.Controls 2.1

Button {
    id: control
    text: qsTr("Button")

    contentItem: Text {
        text: control.text
        font: control.font
        opacity: enabled ? 1.0 : 0.3
        color: control.down ? "#17a81a" : "#21be2b"
        horizontalAlignment: Text.AlignHCenter
        verticalAlignment: Text.AlignVCenter
        elide: Text.ElideRight
    }

    background: Rectangle {
        implicitWidth: 100
        implicitHeight: 40
        opacity: enabled ? 1 : 0.3
        border.color: control.down ? "#17a81a" : "#21be2b"
        border.width: 1
        radius: 2
        color: "black"  // I update background color by this
    }
}
Run Code Online (Sandbox Code Playgroud)

que*_*ent 13

与 QT Quick 2 配合使用:

Button {
        id: button
        text: qsTr("Button text")

        background: Rectangle {
                color: parent.down ? "#bbbbbb" :
                        (parent.hovered ? "#d6d6d6" : "#f6f6f6")
        }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码在按钮按下或悬停时更改按钮颜色。还可以添加边框或其他自定义设置。


fol*_*bis 8

常见的方法QtQuick.Controls 2是重新定义默认的Control视觉属性来自定义一个Control. 如上所述,这种方法的缺点是您不能更改,例如,只能更改背景颜色。覆盖Control.background强制您重新定义所有元素,包括边框、颜色、动画等。

望着Button来源,我们可以看到,默认定义Control.background基于属性Control.palette。使用这个属性,我们可以覆盖这些Control属性:

例如:

Button {        
    text: "Test button"
    palette {
        button: "green"
    }
}
Run Code Online (Sandbox Code Playgroud)

但是你应该明白,内部来源在未来可能会发生变化。此外,您必须自己想象指定控件使用了哪些调色板属性。

在上面的例子中,我为指定的控件重新定义了调色板。但是您可以全局重新定义调色板,要么在qtquickcontrols2.conf 中设置颜色,要么在 C++ 中设置自定义调色板 - QGuiApplication::setPalette()

  • 从 Quick.Controls 2.1 开始,这不起作用:无法分配给不存在的属性“调色板” (3认同)
  • 感谢您的回答。仅供那些也想更改文本颜色的人使用:`palette { button: "black" buttonText: "white" }` (2认同)