首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QML项在C++和QML中都有

QML项在C++和QML中都有
EN

Stack Overflow用户
提问于 2016-07-13 07:24:21
回答 1查看 702关注 0票数 1

我的目标是描述qml文件中的qml项,然后使用相应的C++类添加到该项的可视化表示中。

我知道可以描述一个qml项目,并在qml文件中使用它,并通过信号/插槽从c++与它进行通信。

我还知道,可以在C++中使用QQuickPaintedItem描述qml项,并在qml文件中使用它(通过注册机制使其可用)。还有别的办法吗?

那么,实际的问题是能否将两者结合在一个项目中呢?因此,我希望有一个qml项和一个c++类来绘制相同的区域,例如,我在c++中有特定的OpenGL代码,还有一个在qml中定义了MouseArea的常规矩形框架。

EN

回答 1

Stack Overflow用户

发布于 2016-07-13 17:08:08

在得到Andrej的提示之后,我决定通过创建一个从C++派生的包装类,并通过它覆盖paint方法,实现我的目标: qml表示和一个QQuickPaintedItem呈现类。有了这个,我可以在代码中呈现到项中。该项在我的主qml文件中使用。

它是一个包装类,因为它加载了我想要通过QQmlComponent显示的qml文件,它也创建了我想要显示的QuickItem。为此,我将加载/创建项的父项设置为我的包装类。因此,在我的QuickPaintedItem类中(最好在类engine中完成,当引擎已经初始化时):

QQmlComponent component(engine,QUrl("qrc:/myqml.qml")); QObject* object = component.create(); QQuickItem* quickItem = qobject_cast<QQuickItem*>(object); quickItem->setParentItem(this);

然后呈现myqml.qml和我的画图方法。我有一个中央的地方我可以用这两种。

在Velkan的注释之后,另一种方法是将组件加载到一个加载器 qml项中:

Wrapper { Loader{ onQmlChanged: source = newQml } }

其中,onQmlChanged将是消耗信号的时隙:

signal onQmlChanged(string newQml);

我不能说哪一种方式表现更好。在qml中定义结构似乎更容易、更干净。代码版本的一个不同之处在于,它在包装器创建时加载项,因此在创建main.qml期间和显示项目之前都是如此。

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

https://stackoverflow.com/questions/38345159

复制
相关文章

相似问题

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