我目前正在按照此 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”未安装
如何使我的模块在我的应用程序中可见? 我缺少哪一步?
我目前正在做类似的事情。
我创建了一个演示应用程序,在其中导入模块。这些模块向主应用程序提供 QML 和 C++ 项目。检查 CMAKE 文件中的注释以了解其工作原理。
这是链接:
https://gitlab.com/basic53/DemoApp
欢迎对此发表评论。
另一个提示: 如果 qt_add_qml_module 无法正常工作,有时需要删除整个构建文件夹并更新 QML 代码模型。您可以检查生成的文件,看看您的插件是否已使用所有类型创建。
CMake 本身没问题,这是运行时错误而不是链接错误。
出现此问题是因为 QQmlApplicationEngine 找不到通往我模块的 QMLDIR 的路径。 最后唯一缺少的就是QQmlEngine中多了一个导入路径“:/”:
QQmlApplicationEngine engine;
engine.addImportPath(":/");
我正在尝试以相同的方式将常见的自定义 QML 控件添加到我的项目中,即我在项目外部有我的 QmlModule 文件夹。 我发现 Qt 文档在完整的示例方面对于一个相当复杂的主题来说还不够。我的问题是它无法链接插件库,即使错误消息中指定的 dll 存在。 我按照 Jürgen Lutz 的 DemoApp 进行操作,发现关键的缺失步骤是
target_link_libraries(${EXECUTABLE_NAME} PRIVATE myComponentTarget)
在我的应用程序 CMakeLists.txt 中