如何解决如何在不破坏内部绑定的情况下从外部初始化自定义项目的属性?
我正在尝试制作一个带有用于HSL组件的三个滑块的颜色调整面板。它由可重复使用的N = 500
keys = np.arange(0,N)
df = {
'0': keys[np.random.randint(0,N,size=int(1e6))],'1': np.random.rand(int(1e6))
}
df = pd.DataFrame(df)
项组成:
ColorPanel
我在Item {
id: root
property color color: Qt.hsla(sliderH.value,sliderS.value,sliderL.value,1.0)
implicitWidth: 300; implicitHeight: 100
Rectangle { anchors.fill: parent }
Column {
width: parent.width
Slider { id: sliderH }
Slider { id: sliderS }
Slider { id: sliderL }
}
}
中使用了两次,一次用于调整main.qml
的背景色,另一次-调整其文本颜色:
Label
这个非常简短的示例将产生以下UI:
我确实能够通过使用鼠标移动滑块来设置ApplicationWindow {
width: 500; height: 400
visible: true
title: qsTr("Color Setup")
header: RowLayout {
spacing: 10
ColorPanel { id: colorText }
ColorPanel { id: colorBackground }
}
Label {
anchors.centerIn: parent
color: colorText.color
text: qsTr("How to initialize the colors?")
font.pointSize: 22; padding: 11
background: Rectangle { color: colorBackground.color }
}
}
的背景和前景(文本)颜色。但是,在程序启动时Label
是黑色的,因为滑块位于Label
处。我当然可以将它们设置为不同的值,但这无济于事,因为它仍然会导致两种颜色相同并且文本仍然不可见。因此,我需要将两个面板的0
属性初始化为不同的值。
问题是,当我写这样的东西来初始化颜色时:
color
在启动时确实将颜色设置为所需的值,但是新的绑定将内部绑定中断到ColorPanel { id: colorText; color: "red" }
ColorPanel { id: colorBackground; color: "green" }
,并且无法再使用滑块设置颜色。
将accepted answer设置为如何在qml中设置自定义滑块的初始值?建议将属性设置为别名,例如Qt.hsla(sliderH.value,1.0)
,但是我应该参考什么?
如何解决这个问题?
解决方法
您可以只向initialColor
添加一个ColorPanel
属性,然后将滑块连接到它,如下所示:
Item {
id: root
property color initialColor
property color color: Qt.hsla(sliderH.value,sliderS.value,sliderL.value,1.0)
implicitWidth: 300; implicitHeight: 100
Rectangle { anchors.fill: parent }
Column {
width: parent.width
Slider { id: sliderH; value: initialColor.hslHue }
Slider { id: sliderS; value: initialColor.hslSaturation }
Slider { id: sliderL; value: initialColor.hslLightness }
}
}
然后在main.qml
中代替color
,像这样使用initialColor
:
ColorPanel { id: colorText; initialColor: "red" }
ColorPanel { id: colorBackground; initialColor: "green" }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。