【问题标题】:How to connect a JavaScript function to a property signal?如何将 JavaScript 函数连接到属性信号?
【发布时间】:2013-02-15 17:03:28
【问题描述】:

我是 Qml 新手,在将 javascript 处理程序连接到属性信号时遇到了一些麻烦。我有一个带有属性和信号的 C++ 对象。

class CppObject : public QObject
{
    Q_OBJECT
    Q_PROPERTY(QVariant value READ getValue WRITE setValue NOTIFY valueChanged)

signals:
    void valueChanged(const QVariant &);
};

对象是通过 C++ 工厂方法创建的,我可以绑定这些值 并更改 Qml 属性。这一切都有效。

property CppObject obj: cppProxy.PropertyFactory("foo");

Text
{
    x: 100;
    y: 100;
    text: parent.obj.value;
}

对于某些属性,我想将 valueChanged 信号连接到 javascript 函数。 我一直在通过 Qml 文档上下,并尝试了一堆没有的东西 运气好的话。我认为这样的事情应该可以工作,但没有

function objEventHandler()
{
    console.log('objEventHandler() ran')
}

Component.onCompleted:
{
    obj.value.valueChanged.connect(objEventHandler);
}

最好的方法是什么?

【问题讨论】:

    标签: qt qml


    【解决方案1】:

    您也可以按照您在示例中尝试的方式进行连接,但形式为:

    Component.onCompleted:
    {
        obj.valueChanged.connect(objEventHandler);
    }
    

    信号不是“value”对象的属性,而是“obj”的属性。

    【讨论】:

    • 我遇到的另一个复杂情况是,如果您从 C++ 获取信号,则信号处理程序中的“this”并不总是得到很好的定义。所以,在这个例子中,我必须使用闭包来保留对“obj”上下文的访问,如下所示:Component.onCompleted: { var o = obj; obj.valueChanged.connect(function() { console.log(o.text); }); }
    【解决方案2】:

    使用连接对象很简单。

    Connections
    {
        target: obj;
        onValueChanged: console.log('changed');
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-08
      • 2013-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多