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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将C ++类设置为qml中的Item?相关的知识,希望对你有一定的参考价值。

我有一个名为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”的对象,以便我可以将此对象上的所有数据都设置为所有信号?

答案

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

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

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

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

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

如果你只需要连接一个信号,那么你需要的只是一个连接元素,只要ObjectAccessor.class2obj实际工作:

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

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

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

以上是关于如何将C ++类设置为qml中的Item?的主要内容,如果未能解决你的问题,请参考以下文章

如何将div中的内容设置为空同时还要保留div本身

如何将 ctrl+c 发送到 c# 中的进程?

在创建VSCode片段时,如何将变量转换为title-case(如TitleCase)?

如何将 NonNull 设置为连接类中的节点和边?

将Qt的QML代码转换为C ++

如何在 Python 中的每个单元测试之前和之后运行特定代码