使用CMake导入QML模块失败

问题描述 投票:0回答:3

我目前正在按照此 CMake 架构构建一个极简应用程序:

-根

--Qml模块

---组件1.qml

---Component2.qml

--应用1

---main.cpp

---main.qml

--应用程序2

---main.cpp

---main.qml

我使用“qt6_add_qml_module”在“QmlModule”级别创建一个 QML 模块作为静态库。

qt_add_library(myComponentTarget STATIC)
qt6_add_qml_module(myComponentTarget
URI QmlModule
VERSION 1.0
QML_FILES
    Component1.qml
    Component2.qml
RESOURCES
    logo.png)

然后,在 App1(和 App2)级别,使用“target_link_libraries”完成模块的链接。 “qt6_add_qml_module”在幕后做了一些工作,以便通过名为“your_component_URIplugin”的自动生成的插件公开模块。有关此的更多详细信息此处

add_executable(App1Exe 
    main.cpp)
qt6_add_qml_module(App1Exe
    URI App1
        VERSION 1.0
    QML_FILES
        main.qml)
target_link_libraries(App1Exe 
    PRIVATE 
    myComponentURIplugin)

在根级别,我重载 QML_IMPORT_PATH 以便链接到构建文件夹并添加所有子目录。

set(QML_IMPORT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/qmlModule)
add_subdirectory(QmlModule)
add_subdirectory(App1)
add_subdirectory(App2)

我运行 CMake 没有任何错误,并打开 App1/main.qml 文件。 在我的

import QmlModule
上,找不到该模块:

模块“lupinComponentsplugin”未安装

如何使我的模块在我的应用程序中可见? 我缺少哪一步?

c++ qt cmake qml
3个回答
2
投票

我目前正在做类似的事情。

我创建了一个演示应用程序,在其中导入模块。这些模块向主应用程序提供 QML 和 C++ 项目。检查 CMAKE 文件中的注释以了解其工作原理。

这是链接:

https://gitlab.com/basic53/DemoApp

欢迎对此发表评论。

另一个提示: 如果 qt_add_qml_module 无法正常工作,有时需要删除整个构建文件夹并更新 QML 代码模型。您可以检查生成的文件,看看您的插件是否已使用所有类型创建。


1
投票

CMake 本身没问题,这是运行时错误而不是链接错误。

出现此问题是因为 QQmlApplicationEngine 找不到通往我模块的 QMLDIR 的路径。 最后唯一缺少的就是QQmlEngine中多了一个导入路径“:/”:

QQmlApplicationEngine engine;
engine.addImportPath(":/");

0
投票

我正在尝试以相同的方式将常见的自定义 QML 控件添加到我的项目中,即我在项目外部有我的 QmlModule 文件夹。 我发现 Qt 文档在完整的示例方面对于一个相当复杂的主题来说还不够。我的问题是它无法链接插件库,即使错误消息中指定的 dll 存在。 我按照 Jürgen LutzDemoApp 进行操作,发现关键的缺失步骤是

target_link_libraries(${EXECUTABLE_NAME} PRIVATE myComponentTarget)

在我的应用程序 CMakeLists.txt 中

© www.soinside.com 2019 - 2024. All rights reserved.