[英]How to find out when the QQuickItem-derived class object is initialized?
[英]How to correctly instantiate QQuickItem-derived object from C++?
如何创建从C ++代码从QQuickItem
派生的我自己的对象的实例的正确方法是什么?
目前,我正在使用以下代码段创建新对象:
//setup default values
MyType* quickItem = new MyType;
quickItem->setParent(parent);
quickItem->setParentItem(qobject_cast<QQuickItem*>(parent));
QQmlEngine::setObjectOwnership(quickItem, QQmlEngine::JavaScriptOwnership);
它的工作效果很好,但未执行void componentComplete()
方式与未设置isComponentComplete
标志的方式相同。
创建对象后手动调用componentComplete()
方法是否安全?
还是有任何QmlFactory
能够创建C ++对象并执行正确的初始化?
我想问题是创建该对象时会发生错误的期望。
从文档中可以看到, QQuickItem::componentComplete
覆盖了QQmlParserStatus::componentComplete
,这是一个纯虚拟成员方法。
如果查看QQmlParserStatus::componentComplete
的文档 ,则会指出:
在导致该实例化的根组件完成构造之后调用。 [...]
从您的示例中,在我看来,没有根对象导致该实例化,因为您正在显式分配它。
因此,没有理由应调用该方法,而您正在确认这一点,因此一切工作均按预期进行。
那是您所期望的吗? 也许不行,所以这可能是错误。
编辑
您还问:
创建对象后手动调用componentComplete()方法是否安全?
好吧,我将按照注释中发布的链接中的建议导出类型,然后从QML环境中实例化对象,因为这似乎是正确的方法,也是预期的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.