如何解决如何在cmake中使用QML_ELEMENT 解决方案
doc显示了我可以通过在qmake的.pro文件中添加一些变量来使用QML_ELEMENT宏从C ++创建QML类型。但是我在用cmake
解决方法
据我所见,CMake尚未通过查看documentation来支持CONFIG += qmltypes
,这是QML_ELEMENT
所必需的,即使对于主分支也是如此。
通过util on the wip/cmake
branch测试它们,为Qt6提供python .pro到cmake转换器的工作不是合并的,也不是据我所知无法正常工作(CMakeLists.txt没有相关信息)。
您可以看到实际的conversion script确实在CONFIG中测试了qmltypes
的存在,但是似乎没有映射到可用于CMake的任何内容。
解决方案
请使用较旧的qmlRegisterType
,而不要使用Qt 5.15(在撰写本文时为最新)中全新的QML_ELEMENT
和CONFIG += qmltypes
,而应使用旧的Writting QML extensions for C++ | Qt 5.14从C ++:
#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,"YourQmlComponent");
//Create your QML view or engine
}
只要您的代码/插件执行qmlRegisterType
语句,这就不需要在项目文件方面进行任何特定的操作。
您可以参考Qt的文档,与您的页面相同,但要使用Qt 5.14而不是最新的文档,该文档准确地描述了以下内容:{{3}}
,现在 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
看看它的实际效果 - 现在在
pro2cmake.py
的 Qt 源中有run_pro2cmake.py
和Qt/6.0.0/Src/qtbase/util/cmake
文件。在此 Readme 页面上提到了它们,您可以在 here 中找到它们,但我自己还没有尝试过。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。