我有圖形元素組成的外部QML module。我想找到它的路徑,以將其添加到我的QQmlApplicationEngine
。有沒有辦法做到這一點?添加外部QML模塊路徑QQmlApplicationEngine
QQmlApplicationEngine engine;
engine.addImportPath("externalQmlModulePath");
有了這個,我就可以從我的qrc
的QML
文件(當然裏面的項目)import
圖形元素。
我有圖形元素組成的外部QML module。我想找到它的路徑,以將其添加到我的QQmlApplicationEngine
。有沒有辦法做到這一點?添加外部QML模塊路徑QQmlApplicationEngine
QQmlApplicationEngine engine;
engine.addImportPath("externalQmlModulePath");
有了這個,我就可以從我的qrc
的QML
文件(當然裏面的項目)import
圖形元素。
看看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上,通過將資源放入應用程序包中,您可以更輕鬆地脫身。
我需要的路徑是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 /數據)' –
嗯..文檔說,路徑列表按優先級排序。我想這只是另一個平臺特定的事情,我們必須小心。 – qCring
所以你有一個QML模塊,但你不知道它在哪裏? – dtech
我這樣做,但它在項目之外,可能因個人電腦而異(我們有幾個開發人員)。這就是爲什麼我不想使用絕對路徑。我一直在考慮在我的CMake文件中添加模塊目錄。可以幫助嗎? –