加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

qt – 在C中创建QML元素?

发布时间:2020-12-16 03:36:25 所属栏目:百科 来源:网络整理
导读:我有以下问题: 我使用.qml文件将初始界面加载到QQuickView中. 然后我想使用C将QML types像图像或文本一样添加到界面. 我知道我可以操纵C中的现有元素,但是如何创建新类型并添加它们呢? 解决方法 不幸的是,文档有点过时(使用Qt4 api),但如果你阅读C部分加载
我有以下问题:

我使用.qml文件将初始界面加载到QQuickView中.
然后我想使用C将QML types像图像或文本一样添加到界面.

我知道我可以操纵C中的现有元素,但是如何创建新类型并添加它们呢?

解决方法

不幸的是,文档有点过时(使用Qt4 api),但如果你阅读C部分加载QML组件部分: https://doc.qt.io/qt-4.8/qtbinding.html

然后你应该有类似的东西(使用Qt5 api):

QQuickView view;
view.setSource(QUrl::fromLocalFile("MyView.qml"));
QQmlComponent component(view.engine(),QUrl::fromLocalFile("MyItem.qml"));
QObject *object = component.create();

这为您提供了.qml文件中的QObject,但缺少的是如何将其添加到视图中.在qml中,除非它们是视图的父级,否则不会绘制项目.一种方法是将项添加到根上下文中,如下所示:

QQmlProperty::write(object,"parent",QVariant::fromValue<QObject*>(view.rootObject()));

另外,请注意(再次从上面的链接):“你应该总是使用QObject :: setProperty(),QDeclarativeProperty或QMetaProperty :: write()来更改QML属性值,以确保QML引擎知道属性更改”.

接下来,我们需要设置项目的所有权,否则JavaScript垃圾处理程序可以删除您的项目,您可以随机地查询故障.

QQmlEngine::setObjectOwnership(object,QQmlEngine::CppOwnership);

最后,您需要记住删除对象“对象”.既然它是QObject你应该使用:

object->deleteLater();

希望有人帮助!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读