【问题标题】:Add external QML module path to QQmlApplicationEngine将外部 QML 模块路径添加到 QQmlApplicationEngine
【发布时间】:2016-03-01 17:52:28
【问题描述】:

我有一个由图形元素组成的外部QML module。我想找到它的路径以便将它添加到我的QQmlApplicationEngine。有没有办法做到这一点?

QQmlApplicationEngine engine;

engine.addImportPath("externalQmlModulePath");

有了这个,我就可以import qrcQML 文件中的图形元素(当然是在项目中)。

【问题讨论】:

  • 那么你有一个QML模块,但你不知道它在哪里?
  • 我愿意,但它在项目之外,并且可能因一台 PC 不同而有所不同(我们有几个开发人员)。这就是我不想使用绝对路径的原因。我一直在考虑在我的 CMake 文件中添加模块目录。这有帮助吗?

标签: qt module cmake qml


【解决方案1】:

看看QStandardpaths。拥有与这些路径相关的资源(无论是您自己的还是第三方的)使它们在目标系统上始终可用。应用程序特定数据的建议路径是QStandardPaths::AppDataLocation

在 CMake 中,您可以添加自定义构建后命令来复制您的所有资源(同样,如果您自己或第 3 方没有区别):

add_custom_command(TARGET ${MY_APP} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory ${MY_APP_RES_SOURCE_DIR} ${MY_APP_RES_DEST_DIR})

编辑

QStandardPaths::AppDataLocation 当然只是一个枚举值,用于指定您正在寻找的标准路径。要实际获取应用数据路径,请使用 standardLocations 方法,如下所示:

auto appDataPath = QStandardPaths::standardLocations(QStandardPaths::AppDataLocation).first();

最后,将应用的资源文件夹添加为导入路径(就像你已经做的那样),你就完成了:

engine.addImportPath(appDataPath + "/res_dir_name");

注意:在 Mac 上,您可以通过将资源放入应用程序包中更轻松地摆脱困境。

【讨论】:

  • 我需要的路径是列表的last(),而不是first()。那是怎么决定的?请注意,appDataPathdata 文件夹结束:D:/workspace/bin/APPLICATIONS_xx_qt/Release/data。它会自动查找构建类型 (Release) 并创建一个 data 文件夹。因此,这是我最后的CMake 命令:ADD_CUSTOM_COMMAND(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E COPY_DIRECTORY ${QML_COMPONENTS_DIR} ${EXECUTABLE_OUTPUT_PATH}/${CMAKE_BUILD_TYPE}/data)
  • 嗯.. 文档说路径列表是按优先级排序的。我想这只是我们必须注意的另一个特定于平台的事情。
猜你喜欢
  • 2015-12-03
  • 2015-08-21
  • 2022-01-21
  • 2013-07-16
  • 2012-03-14
  • 2016-04-03
  • 2013-03-10
  • 1970-01-01
  • 2019-09-01
相关资源
最近更新 更多