Qt 您是否必须完全替换属性值才能对其进行自定义?

Qt 您是否必须完全替换属性值才能对其进行自定义?,qt,qml,qtquick2,qtquickcontrols2,Qt,Qml,Qtquick2,Qtquickcontrols2,我搞不清楚如何定制组件。大多数示例显示了如何自定义并完全替换组件的背景。例如: menuBar: MenuBar { ... background: Rectangle { implicitWidth: 40 implicitHeight: 40 color: "red" Rectangle { color: "#21be

我搞不清楚如何定制组件。大多数示例显示了如何自定义并完全替换组件的
背景。例如:

menuBar: MenuBar {
...
        background: Rectangle {
            implicitWidth: 40
            implicitHeight: 40
            color: "red"

            Rectangle {
                color: "#21be2b"
                width: parent.width
                height: 1
                anchors.bottom: parent.bottom
            }
        }
}
为什么我不能像下面这样做,因为当我在源代码中查找
MenuBar.qml
时,它已经在
背景中使用了一个
矩形
。我宁愿修改退出的
背景
,也不愿从头开始完全重新创建它

menuBar: MenuBar {
...
   background.color: "red";
}

如果您的唯一目标是避免替换背景,则可以使用以下解决方案:

MenuBar {
    id: menuBar1

    Binding {
        target: menuBar1
        property: "color"
        value: "red"
    }
}
但我想你不会喜欢它,因为它很快就会变得非常冗长。 您最好编写自己的菜单栏实现:

//MyMenuBar.qml

MenuBar {

    property alias backgroundColor: theBackground.color

    background: Rectangle {
        id: theBackground
   }
}
此组件将继承标准菜单栏的所有属性,以及添加的背景色属性



顺便说一句,有一个概念,但在本例中不起作用,因为
background
被声明为
QQuickItem

另一个选项我还没有找到太多文档。您可以查看
菜单栏
(或您感兴趣的任何其他快速控件)的源代码,并查看其用于背景的
调色板
属性。这就是我在源代码中看到的:

    background: Rectangle {
        implicitHeight: 40
        color: control.palette.button
    }
因此,如果您只是尝试将调色板按钮设置为其他按钮,它应该会更改颜色:

MenuBar {
    palette.button: "red"
}
这只对颜色有帮助。如果您想更改任何其他属性,最好只是重新创建整个属性