Q_INVOKABLE方法返回自定义C++类型

Kor*_*idu 9 c++ qt qml

我有一个C++方法制作Q_INVOKABLE.我可以从QML调用这个方法,它在返回基本类型(如QString)时有效.但我不能用自定义类型.我该怎么做?我应该退回QVariant吗?理想情况下,如果可能的话,我想返回指向我的自定义类型的指针.

编辑 我做:

  qmlRegisterType<MyType>("Mine", 1, 0, "MyType");
  qmlEngine->rootContext()->setContextProperty("testObj", new MyType());
Run Code Online (Sandbox Code Playgroud)

我可以使用testObj全局对象或创建MyType QML组件.但我不能在一些javascript代码中使用它作为Q_INVOKABLE C++方法的返回类型.

小智 7

这是可能的,但您需要将自定义类型定义为interface

首先在你的main()函数中:

qmlRegisterInterface<MyType>("MyType");
Run Code Online (Sandbox Code Playgroud)

现在您可以继续创建一个对象并在 a 中返回一个指针Q_INVOKABLE

MyType* example = new MyType(parent);
return example;
Run Code Online (Sandbox Code Playgroud)

注意:将父对象传递给自定义 QObject 以确保此对象与其父对象一起删除(以避免内存泄漏)可能会有所帮助。


lpa*_*app 3

是的,QVariant这是在该构造中自定义类的方法。确保您注册了您的班级。

话虽这么说,您可能希望考虑使用 Q_PROPERTY 作为您的自定义类型,然后即使没有函数调用也可以访问它。如果您需要方法的自定义参数并且无法重新排列代码,那么这显然不是一个选择。