【问题标题】:How to use QML_ELEMENT with cmake如何将 QML_ELEMENT 与 cmake 一起使用
【发布时间】:2020-12-10 00:45:29
【问题描述】:

doc 表明我可以使用 QML_ELEMENT 宏通过在 qmake 的 .pro 文件中添加一些变量来从 C++ 创建 QML 类型。但我正在使用 cmake

【问题讨论】:

  • 您是否尝试使用target_compile_definitions 将这些设置为定义(预处理变量)?或者可能是环境变量(但怀疑)
  • @Amfasis,不,文档中没有这样的提及
  • 我在文档中没有看到太多关于 cmake 的信息,所以我试图在文档之外思考(双关语)

标签: c++ qt cmake qml qt5


【解决方案1】:

更新(Qt 6.2+)

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

旧答案(Qt 6.0/6.1)

现在 Qt 6.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页面上提到了它们,你可以找到它们here,我自己没有尝试过。

【讨论】:

  • Qt6.2 删除了qt6_qml_type_registration,应该使用更强大的qt_add_qml_module
  • 您还需要有#include <QtQml> 否则QML_ELEMENT 将不会在C++ 声明中被识别。
  • @Adverus 你能举例说明如何使用 qt_add_qml_module 吗?文档让我发疯。
【解决方案2】:

据我所知,通过查看documentation,CMake 尚不支持使用QML_ELEMENT 所需的CONFIG += qmltypes,即使对于主分支也是如此。

据我所知,通过从util on the wip/cmake branch 测试它们(CMakeLists.txt 没有相关信息),据我所知,为 Qt6 提供 python .pro 到 cmake 转换器的努力是针对 Qt6 的,没有合并,也没有功能)。 您可以看到实际的 conversion script 确实测试了 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 而不是最新版本,它准确地描述了这一点:Writting QML extensions for C++ | Qt 5.14

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-06
    • 2018-01-12
    • 1970-01-01
    • 2015-04-08
    • 2019-01-07
    • 1970-01-01
    相关资源
    最近更新 更多