如何以编程方式设置qt控件的禁用状态颜色?

时间:2016-04-25 13:22:35

标签: qt qml qt-creator

在我的窗口的加载事件中,我正在访问rootObject()(这是QQuickItem)并使用它来获取对我的QML文件中定义的控件的引用。然后我使用此代码以编程方式设置/更改控件的颜色:

object->setProperty("color", "#3060C0");

这可以并且确实将控件更改为我想要的颜色。但是,如果禁用该控件然后在运行时重新启用该控件,则会显示默认颜色(黑色)而不是颜色#3060C0。如果我在QML文件中设置color:属性,即使在禁用并重新启用后它也会“粘住”并保留此颜色,但我需要能够以编程方式更改此颜色。

除了像我正在做的常规“颜色”属性之外,还有一些方法可以以编程方式设置禁用状态颜色吗?或者某些方法可以在启用属性完全更改时禁用颜色更改?

1 个答案:

答案 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... })