【问题标题】:Is there a way to detect if a QML property is bound (not set to a static value)?有没有办法检测 QML 属性是否已绑定(未设置为静态值)?
【发布时间】:2019-08-29 21:25:56
【问题描述】:

是否可以区分设置为静态值的属性与绑定到其他内容的属性之间的区别?我检查了文档,但没有看到任何关于此的内容。

Rectangle {
    id: firstRect
    color: "black"  // set to static value
}
Rectangle {
    color: firstRect.color  // bound to external value
}

在这个例子中,我是否可以检测到第一个矩形颜色是静态值,而第二个矩形颜色是绑定的?

【问题讨论】:

  • 了解您的用例会很有趣。调试?还有什么?如果这是不可能的(我有点怀疑它不是),也许还有另一种方法可以实现你所需要的。
  • 我在其中公开了一个控件的属性,以便用户可以在运行时在沙盒环境中修改它们。如果能够告诉用户属性的默认值是绑定还是静态值,以及在被覆盖时能够恢复原始绑定或值等等,那就太好了。
  • 据我记得,可以找到连接到信号的插槽。我没有进行任何实验,但也许可以搜索所有属性更改信号,并找出它们是否会触发其他属性的更改。

标签: qt qml


【解决方案1】:

我认为您所追求的是私有静态方法:QQmlPropertyPrivate::binding()。例如这里是一些 QtQuick Designer 代码using it

在技术上属于 Qt 私有部分,我不确定这是否有帮助。有趣的是,Qt::QML Type 有一个 Qt.binding() 函数,用于分配绑定(显然在幕后调用了上述私有方法)。还有 QML Binding 类型。但在这两种情况下,我都看不到获取已分配给属性的现有绑定 (QAbstractBinding) 实例的方法。

响应一些 cmets:通过 Qt 元对象系统,您可以找到与属性通知器信号相关联的内容。但是要做到这一点,您需要知道所讨论的 QML 属性绑定到(或不绑定到)的QObjectQMetaProperty......这让我们回到了我相信的第 1 格(找出什么属性是必然的,如果有的话)。

【讨论】:

    猜你喜欢
    • 2021-02-05
    • 2018-09-06
    • 1970-01-01
    • 2017-09-02
    • 1970-01-01
    • 2018-09-26
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多