2016-03-01 129 views
0

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

QQmlApplicationEngine engine; 

engine.addImportPath("externalQmlModulePath"); 

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

+0

所以你有一个QML模块,但你不知道它在哪里? – dtech

+0

我这样做,但它在项目之外,可能因个人电脑而异(我们有几个开发人员)。这就是为什么我不想使用绝对路径。我一直在考虑在我的CMake文件中添加模块目录。可以帮助吗? –

回答

2

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

在CMake的,你可以添加自定义生成后命令复制所有的资源(再次,如果你自己或第三方没有区别):

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上,通过将资源放入应用程序包中,您可以更轻松地脱身。

+0

我需要的路径是list的'last()',而不是'first()'。这是如何决定的? 请注意'appDataPath'完成一个'data'文件夹:'D:/ workspace/bin/APPLICATIONS_xx_qt/Release/data'。它会自动查找构建类型('Release')并创建一个'data'文件夹。 因此,这是我最后的'CMake'命令: 'ADD_CUSTOM_COMMAND(TARGET $ {} PROJECT_NAME COMMAND POST_BUILD $ {} CMAKE_COMMAND -E COPY_DIRECTORY $ {QML_COMPONENTS_DIR} $ {EXECUTABLE_OUTPUT_PATH}/$ {} CMAKE_BUILD_TYPE /数据)' –

+1

嗯..文档说,路径列表按优先级排序。我想这只是另一个平台特定的事情,我们必须小心。 – qCring