2016-03-01 76 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