2014-12-07 56 views
2

我的應用程序基於QML我使用CameraCameraCapture從相機捕捉圖像。捕獲後,我想將捕獲的圖像存儲在CameraCapture.captureToLocation()的應用程序數據文件夾中。但我不知道如何獲得這個文件夾的路徑。所以我的問題 - 我怎樣才能獲得路徑到應用程序文件夾機智寫權限? Qt有辦法得到它嗎?它應該是系統指定的文件夾,我猜。例如在Android中,它應該是/ data/data/AppName。正如我所見,LocalStorage在一些類似的地方創建了它的文件。QML數據文件夾

回答

2

/data/data/AppNameQStandardPaths映射,但我認爲這將是更好的使用這一個:

QStandardPaths :: AppDataLocation 17返回將持久應用程序數據可以存儲在目錄位置。這是一個特定於應用程序的目錄。要獲取存儲要與其他應用程序共享的數據的路徑,請使用QStandardPaths :: GenericDataLocation。返回的路徑永遠不會爲空。在Windows操作系統上,這將返回漫遊路徑。這個枚舉值被添加到Qt 5.4中。

或這一個早期版本:

QStandardPaths :: DataLocation 9返回相同的值AppLocalDataLocation。此枚舉值已棄用。最好使用AppDataLocation,因爲在Windows上建議使用漫遊路徑。

這些將在Android上設置爲DataLocation "<APPROOT>/files", "<USER>/<APPNAME>/files"

但請注意,從5.4開始,後者已被棄用,如文件記錄。您可以設置它會出現follows

的QString QStandardPaths :: writableLocation(StandardLocation中類型)

返回將類型的文件應寫入的目錄,或一個空字符串,如果無法確定位置。

注意:返回的存儲位置可以是不存在的目錄;即,它可能需要由系統或用戶創建。

所以,你會寫是這樣的:

QString dataPath = QStandardPaths::​writableLocation(QStandardPaths::AppDataLocation); 
// Do not need to check against empty string for this value as per documentatio 
CameraCapture.captureToLocation(dataPath); 

注:請不要使用QStandardPaths::ApplicationsLocation此目的,因爲那就是非專用位置。此外,它甚至不支持在Android:

ApplicationsLocation(不支持目錄不可讀)

如果你想分享整個應用程序的圖像,你需要稍作調整,用這個上面的代碼。當我想你想上面的一個,這是一個有點不清楚你想要哪一個,所以我提兩個:

StandardPaths :: GenericDataLocation 11返回將在應用程序之間共享持久性數據可以存儲在目錄位置。這是一個通用的價值。返回的路徑永遠不會爲空。

這設置爲Android的GenericDataLocation "<USER>"。在類文檔中提到了精確的映射,您只需向下滾動到表格即可。由於該部分沒有固定鏈接,因此我無法提供直接網址。你也可以檢查你自己,哪個最適合你。

+0

一如既往的好回答,lpapp,謝謝。加上我的兩分錢,個人而言,我發現自己對「下載位置」非常舒服。它在桌面和移動設備上可以回溯到「文件」,我的用戶感覺非常直觀,可以連接移動設備並從其子目錄中獲取文件。無論如何,我想我必須查看'GenericDataLocation'。 – BaCaRoZzo 2014-12-07 10:39:22

+0

首先,感謝@lpapp這樣的詳細解答。我需要爲應用程序指定的數據路徑。所以我尋找了一些跨平臺的解決方案,至少它應該可以在Windows,Linux和Android上運行。我測試過GenericDataLocation,它指向系統數據文件夾,所以我只是將應用程序名稱添加到這個路徑。當然,我創建了這個文件夾。 – folibis 2014-12-07 12:21:28

+1

@folibis:我建議再次閱讀文檔。 'GenericDataLocation'不是你想要的基於你的問題和這個評論。你說你需要應用程序數據,那就是(應用程序)DataLocation。從GenericDataLocation'自己構建完全沒有意義。我覺得你很困惑。 – lpapp 2014-12-07 12:25:29

1

您可以使用QStandardPaths指定一個可寫位置:

QString path = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) ; 

這裏QStandardPaths::GenericDataLocation返回在其中應用程序之間共享持久性數據可以存儲在目錄中的位置,這是從來沒有空。

也有可能使用QStandardPaths::ApplicationsLocation或許多其他可以找到here。你可以在C++端實現一個函數,並在你的QML中使用它來獲得標準位置。

+0

優秀!謝謝,@Nejat正是我需要的。 – folibis 2014-12-07 12:14:28

+0

@folibis:你能透露你的邏輯嗎? '我測試了GenericDataLocation,它指向系統數據文件夾,所以我只是將應用程序名稱添加到這個路徑中'並且'我需要爲應用程序指定的數據路徑。那就是(App)DataLocation,它是爲你預先創建的GenericDataLocation + appname。你是說你拒絕使用(應用程序)DataLocation並重新創建它?如果是這樣,那對我來說不是一個好主意。 – lpapp 2014-12-07 12:30:37