在我的窗口的加载事件中,我正在访问rootObject()
(这是QQuickItem
)并使用它来获取对我的QML文件中定义的控件的引用。然后我使用此代码以编程方式设置/更改控件的颜色:
object->setProperty("color", "#3060C0");
这可以并且确实将控件更改为我想要的颜色。但是,如果禁用该控件然后在运行时重新启用该控件,则会显示默认颜色(黑色)而不是颜色#3060C0
。如果我在QML文件中设置color:
属性,即使在禁用并重新启用后它也会“粘住”并保留此颜色,但我需要能够以编程方式更改此颜色。
除了像我正在做的常规“颜色”属性之外,还有一些方法可以以编程方式设置禁用状态颜色吗?或者某些方法可以在启用属性完全更改时禁用颜色更改?
答案 0 :(得分:2)
不要用C ++做这件事,这完全是错的。不要制定不良做法。
如果我在QML文件中设置了color:属性,那么"坚持"并保留 这种颜色即使被禁用并重新启用,但我需要 能够以编程方式更改此颜色。
在QML中有一种简单易行的方法,可以在其中完成:
color: enabled ? colEnabled : colDisabled
您可以在出价中使用表达式,并且当表达式包含通知更改的属性时,这会导致表达式在每次组件更改时自动重新评估。因此,每次enabled
更改时,都会根据enabled
是真还是假来分配正确的颜色。
您还可以编写更复杂的表达式,而不仅仅是单个衬里,您可以将表达式编写为:
color: {
if (enabled) return colEnabled
else return colDisabled
}
在分配和绑定之间也要注意。如果您指定将破坏现有绑定的color = someColor
。您还可以在"命令式"中设置绑定。代码:
color = Qt.binding(function() { ...bla bla... })