Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Q#u可调用方法返回自定义C++;类型 我有一个C++方法使qy可调用。我可以从QML调用这个方法,当它返回基本类型(比如QString)时,它就会工作。但我不能使用自定义类型。我该怎么做?我应该返回QVariant吗?理想情况下,如果可能的话,我希望返回一个指向自定义类型的指针_C++_Qt_Qml - Fatal编程技术网

Q#u可调用方法返回自定义C++;类型 我有一个C++方法使qy可调用。我可以从QML调用这个方法,当它返回基本类型(比如QString)时,它就会工作。但我不能使用自定义类型。我该怎么做?我应该返回QVariant吗?理想情况下,如果可能的话,我希望返回一个指向自定义类型的指针

Q#u可调用方法返回自定义C++;类型 我有一个C++方法使qy可调用。我可以从QML调用这个方法,当它返回基本类型(比如QString)时,它就会工作。但我不能使用自定义类型。我该怎么做?我应该返回QVariant吗?理想情况下,如果可能的话,我希望返回一个指向自定义类型的指针,c++,qt,qml,C++,Qt,Qml,编辑 我有: qmlRegisterType(“我的”,1,0,“我的类型”); qmlEngine->rootContext()->setContextProperty(“testObj”,新的MyType()); 我可以使用testObj全局对象或创建MyType QML组件。但是,我不能将它作为JQueNoCucEnrdC++方法中的返回类型使用在一些JavaScript代码中。 < P>是的, qSuffs是您在该构造中自定义类的方法。确保你注册了你的班级 所说的,您可能希望考虑使用Q

编辑 我有:

qmlRegisterType(“我的”,1,0,“我的类型”);
qmlEngine->rootContext()->setContextProperty(“testObj”,新的MyType());

我可以使用testObj全局对象或创建MyType QML组件。但是,我不能将它作为JQueNoCucEnrdC++方法中的返回类型使用在一些JavaScript代码中。

< P>是的,<代码> qSuffs是您在该构造中自定义类的方法。确保你注册了你的班级


所说的,您可能希望考虑使用QY属性来代替自定义类型,然后即使没有函数调用也可以访问该属性。如果您需要方法的自定义参数,并且无法重新排列代码,这显然不是一个选项。

这是可能的,但您需要定义自定义类型 作为一个整体

首先,在main()函数中:

qmlRegisterInterface<MyType>("MyType");
注意:将父对象传递给自定义QObject可能会有好处,以确保此对象与其父对象一起删除(以避免内存泄漏)。

注意,此答案的目标是有类似问题的人,而不是原始询问者

所描述的方法应该可以工作,至少在Qt的最新版本中是如此(我使用的是Qt5.12,但在旧版本中也应该可以工作)。也许这是第一个QML版本中的一个bug

检查表:确认您已完成以下操作:

  • 注册您的类型(或使用)
  • 在qml中导入自定义类型:
    import-Mine 1.0
  • 从QObject派生您的类
  • 在类定义中添加了
    Q_对象

当从
Q\u可调用的
方法返回指针时,请考虑。

我认为Dimitri的答案仅适用于您的类型可复制的情况(因此它不适用于QObject)。我的理解是,当您有一个由Qt操作的类型时,例如,如果它是由可调用的返回的,则必须将该类型注册为:

  • 不可复制的类型(如任何QObject派生模型)不能是元类型
  • 指针类型是另一种类型,因此它需要与它指向的类分开注册
  • 对于指针类型
    Foo*
    您可以在元类型系统中注册它:
    qRegisterMetaType(“Foo*”)

非常感谢。那我就试试QVariant。另外,感谢您提出的使用Q_属性的建议。在我的例子中,方法调用是检索一个对象,这样属性就完全有意义了。谢谢根据文档,应该可以将自定义C++类型从QuiNojkRead方法返回到QML。是否可能,或者是文档中的一个bug?@ KrkKutu:如果您正确登记类型,我想是可能的。那么,我可以登记类型,用StCutExtBealFrices()创建这个C++类型的全局对象,在QML中使用它。但是,我无法从Q_可调用方法返回此类型…您可以。如果提供了nullptr父对象,则当对象超出qml代码中的范围时,会将其删除,因此也不会出现内存泄漏。如果提供了实际的父对象,则该对象将与其父对象一起删除。然而,这只是基于我的实验;我在文档中找不到对这种行为的任何保证。这里实际上有文档记录:
qmlRegisterInterface<MyType>("MyType");
MyType* example = new MyType(parent);
return example;