首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在cmake中使用QML_ELEMENT

如何在cmake中使用QML_ELEMENT
EN

Stack Overflow用户
提问于 2020-08-20 16:13:43
回答 2查看 4.4K关注 0票数 15

文档显示,通过在qmake的.pro文件中添加一些变量,我可以使用QML_ELEMENT宏从C++创建QML类型。但我用的是

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-01 13:56:03

更新(Qt 6.2+)

从QT6.2开始,模块是一个用于构建qml模块的单一命令,它应该处理几乎所有的事情,其中包括替换旧的qt6_qml_type_registration命令。

旧答案(QT6.0/6.1)

现在QT6.0已经过时了,这是支持的,尽管文档很少。你现在需要的是:

代码语言:javascript
复制
set_target_properties(foo PROPERTIES
    QT_QML_MODULE_VERSION 1.0
    QT_QML_MODULE_URI     Foo
)

qt6_qml_type_registration(foo)

然后,您可以在qml中这样做:

代码语言:javascript
复制
import Foo

您可以访问具有QML_ELEMENT和朋友的类型。备注:

  • 在build output文件夹<project>_qmltyperegistrations.cpp<project>.qmltypes中创建了两个文件,如果导入失败,可以查看这些文件是否缺少哪些类型。我发现,有时在添加/删除已注册类型之后,需要进行完全重新编译。
  • Qt示例已经迁移到cmake中,因此请看一看例如Examples/Qt-6.0.0/quick/tableview/gameoflife,看看它的作用
  • 现在,在pro2cmake.py的Qt源代码中有Qt/6.0.0/Src/qtbase/util/cmakerun_pro2cmake.py文件。在这个自述页面中提到了它们,您可以找到它们,这里,还没有亲自尝试过。
票数 12
EN

Stack Overflow用户

发布于 2020-08-21 15:26:51

编辑(QT6.x)

这个答案最初是为QT5.15发布的。现在Qt 6已经可用,如果您使用的是Qt6,请参考@Adversus的回答

原答案(Qt 5.x)

据我所见,CONFIG += qmltypes是使用QML_ELEMENT所必需的,通过查看文档,甚至对于主分支,CMake中还不支持它。

向cmake转换器提供python .pro的工作是针对Qt6的,而不是合并的,而且据我所知,通过从分支中测试它们( CMakeLists.txt没有相关信息),它们没有功能。您可以看到,实际的转换脚本确实测试qmltypes在配置中的存在,但是它似乎没有映射到任何对CMake有用的东西。

解决方案

与其使用QML_ELEMENTCONFIG += qmltypes (这是QT5.15中的全新版本(撰写本文时的最新版本),而且此时CMake不受支持),不如使用C++中的好的旧qmlRegisterType

代码语言:javascript
复制
#include "YouCustomCppClass.h"

int main(int argc, char** argv) {

    // Let you import it with "import ModuleName 1.0" on the QML side
    qmlRegisterType<YouCustomCppClass>("ModuleName", 1, 0, "YourQmlComponent");

    //Create your QML view or engine
}

只要代码/插件执行qmlRegisterType语句,这就不需要项目文件端的任何特定内容。

您可以参考Qt的文档,与您的文档相同,但用于QT5.14,而不是最新的,它准确地描述了:写C++的QML扩展--QT5.14

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

https://stackoverflow.com/questions/63509161

复制
相关文章

相似问题

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