如何将C ++类设置为qml中的Item?

时间:2018-02-28 19:14:03

标签: c++ qt qml

我有一个名为Class2的c ++类,我使用qmlRegisterType方法注册它,并将其用作我应用程序中qml页面的代码。

我有qml文件,在onCompleted我希望获得Class2的对象并在qml文件中将其设置为cl2。但是我收到错误

  

赋值运算符的左侧不是左值

Rectangle{
    Component.onCompleted: {
        cl2=ObjectAccessor.class2obj;//error is here
    }
    Class2 {
            id: cl2
            onMessageChanged: { }                
    }
}

在qml文件中,我更改了Class2

的防御
property Class2 cl2: Class2 {}

但现在又出现了另一个错误

  

无法将[undefined]指定给Class2 *

我如何设置'Class2'的对象?所以我可以在这个对象上的所有数据都是一个信号吗?

1 个答案:

答案 0 :(得分:2)

首先class2objundefined意味着它不是可以从QML访问的属性接口。

其次,您不能将qml对象分配给另一个qml对象。这取决于你想做什么。

如果要分配标识,则必须将其放入目标引用中,并将其作为属性实现:

property Class2 cl2: null
...
cl2=ObjectAccessor.class2obj

如果要分配值,例如将一个对象的属性值设置为另一个,则必须按成员分配该成员。

如果您只需要连接信号,那么您需要的只是一个连接元素,前提是ObjectAccessor.class2obj实际上有效:

Connections {
  target: ObjectAccessor.class2obj
  onMessageChanged: doStuff()
}

要获得更完整的答案,您必须发布与Class2ObjectAccessor相关的代码。并澄清那一点:

  

所以我可以在这个对象上的所有数据都是一个信号