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"
}
这只对颜色有帮助。如果您想更改任何其他属性,最好只是重新创建整个属性