如何将QML_ELEMENT与cmake一起使用



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

更新(Qt 6.2+(

从Qt 6.2开始,Qt_add_qml_module是一个用于构建qml模块的单一命令,它几乎可以处理所有内容,取代了旧的qt6_qml_type_registration命令。

旧答案(问题6.0/6.1(

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

set_target_properties(foo PROPERTIES
QT_QML_MODULE_VERSION 1.0
QT_QML_MODULE_URI     Foo
)
qt6_qml_type_registration(foo)

然后可以在qml:中执行

import Foo

并且您可以访问具有QML_ELEMENT和好友的类型。注:

  • 在生成输出文件夹中创建了两个文件,<project>_qmltyperegistrations.cpp<project>.qmltypes,如果导入失败,可以查看这些文件以查看缺少哪些类型。我发现有时在添加/删除注册类型后,我需要进行完全重新编译
  • Qt示例已迁移到cmake,因此请查看例如Examples/Qt-6.0.0/quick/tableview/gameoflife以了解它的作用
  • 现在在Qt/6.0.0/Src/qtbase/util/cmake的Qt源中有pro2cmake.pyrun_pro2cmake.py文件。它们在这个Readme页面上被提到,你可以在这里找到它们,我自己还没有尝试过

编辑(问题6.x(

这个答案最初发布于5.15问题。既然Qt 6可用,如果你正在使用Qt 6,请参阅@Adversus的答案。

原始答案(问题5.x(

从我所看到的情况来看,使用QML_ELEMENT所需的CONFIG += qmltypes在CMake中还不受支持,即使对于master分支也是如此。

提供python.pro到cmake转换器的工作是针对Qt6的,没有合并,而且据我所知,通过在wip/cmake分支上从util测试它们,它们不起作用(CMakeLists.txt没有相关信息(。您可以看到,实际的转换脚本确实测试了CONFIG中qmltypes的存在,但它似乎没有映射到任何可用于CMake的内容。

解决方案

不要使用QML_ELEMENTCONFIG += qmltypes,这是Qt 5.15中全新的(编写本文时最新的(,并且目前CMake不支持,而是使用C++中的旧qmlRegisterType

#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的文档,与您的文档相同,但针对Qt 5.14而不是最新文档,该文档准确地描述了:为C++编写QML扩展| Qt 5.14

相关内容

  • 没有找到相关文章

最新更新