从我所见,通过查看文档,CMake 尚不支持CONFIG += qmltypes使用,即使对于 master 分支也是如此。QML_ELEMENT
并且通过在wip/cmake分支上从util测试它们(CMakeLists.txt 没有相关信息),为 Qt6 提供 python .pro 到 cmake 转换器的努力,没有合并,并且据我所知没有功能。您可以看到实际的转换脚本确实测试了qmltypesCONFIG 中的存在,但它似乎没有映射到任何可用于 CMake 的东西。
而不是使用QML_ELEMENTand CONFIG += qmltypes,它是 Qt 5.15 中的全新(编写本文时的最新版本),并且目前不受 CMake 支持,而是使用qmlRegisterTypeC++ 中的旧版本:
#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
}
Run Code Online (Sandbox Code Playgroud)
只要您的代码/插件执行qmlRegisterType语句,这将不需要项目文件方面的任何特定内容。
您可以参考 Qt 的文档,与您的页面相同,但是 Qt 5.14 而不是最新的,它准确地描述了这一点:Writting QML extensions for C++ | Qt 5.14
现在 Qt 6.0 出来了,虽然没有很好的记录,但它已经得到支持。你现在需要的是:
set_target_properties(foo PROPERTIES
QT_QML_MODULE_VERSION 1.0
QT_QML_MODULE_URI Foo
)
qt6_qml_type_registration(foo)
Run Code Online (Sandbox Code Playgroud)
然后你可以在 qml 中做:
import Foo
Run Code Online (Sandbox Code Playgroud)
并且您将可以访问具有QML_ELEMENT和朋友的类型。笔记:
<project>_qmltyperegistrations.cpp并且<project>.qmltypes,如果进口失败,你可以看看那些看哪些类型的缺失。我发现有时在添加/删除注册类型后我需要进行完全重新编译。Examples/Qt-6.0.0/quick/tableview/gameoflife以查看其实际效果pro2cmake.py和run_pro2cmake.py文件,位于Qt/6.0.0/Src/qtbase/util/cmake. 他们在这个自述页面上提到,你可以在这里找到它们,我自己还没有尝试过。