首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从C++正确实例化QQuickItem派生对象?

如何从C++正确实例化QQuickItem派生对象?
EN

Stack Overflow用户
提问于 2016-01-12 01:24:53
回答 1查看 479关注 0票数 2

如何从C++代码中创建从QQuickItem派生的我自己的对象的实例的正确方法是什么?

目前,我正在使用以下代码片段创建新对象:

代码语言:javascript
复制
//setup default values
MyType* quickItem = new MyType;
quickItem->setParent(parent);
quickItem->setParentItem(qobject_cast<QQuickItem*>(parent));
QQmlEngine::setObjectOwnership(quickItem, QQmlEngine::JavaScriptOwnership);

它工作得很好,但是由于没有设置isComponentComplete标志,所以void componentComplete()不会被执行。

在对象创建后手动调用componentComplete()方法安全吗?

或者有没有能够创建C++对象并执行正确初始化的QmlFactory

EN

回答 1

Stack Overflow用户

发布于 2016-01-12 03:44:29

我猜问题在于,在创建对象时,对应该发生的事情有一个错误的预期。

正如您从documentation中看到的,QQuickItem::componentComplete覆盖了QQmlParserStatus::componentComplete,这是一个纯虚拟成员方法。

如果你看一下QQmlParserStatus::componentCompletedocumentation,它会指出:

在导致此实例化的根组件完成构造后调用的

。..。

从您的示例中,在我看来,没有导致实例化的根对象,因为您显式地分配了它。

正因为如此,没有理由应该调用该方法,而您正在确认这一点,因此一切都按预期工作。

这是你所期待的吗?也许不是,所以这可能是错误所在。

编辑

你还问了:

在对象创建后手动调用componentComplete()方法安全吗?

嗯,我会按照我在评论中发布的链接中的建议导出类型,然后我会从QML环境中实例化对象,因为这似乎是正确的方法,也是预期的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34727502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档