Qt 獲取程式所在路徑等特殊路徑的方法

2021-10-25 15:38:59 字數 2479 閱讀 8648

目錄

經常我們的程式中需要訪問一些特殊的路徑,比如程式所在的路徑、使用者目錄路徑、臨時資料夾等。在 qt 中實現這幾個功能所用的方法雖然都不難,但是各不相同,每次用到時還要現去查,很不方便。因此就寫了這篇部落格,把這幾種需求的實現方式總結了一下。

比如我們有乙個程式在:

c:/qt/examples/tools/regexp/regexp.exe

//輸出:c:/qt/examples/tools/regexp
可以這麼寫:

//輸出:c:/qt/examples/tools/regexp/regexp.exe
qdir 提供了乙個靜態函式 currentpath() 可以獲取當前工作目錄,函式原型如下:

qdebug() << qdir::currentpath();
如果我們是雙擊乙個程式執行的,那麼程式的工作目錄就是程式所在目錄。

如果是在命令列下執行乙個程式,那麼執行程式時在命令列的哪個目錄,那個目錄就是當前目錄。

qt 4 中的方法。下面的方法只對 qt 4 有效,qt 5 已經刪除了 storagelocation() 方法。

qdesktopservices::storagelocation(qdesktopservices::homelocation);
qt 5 中引入的方法。

qstandardpaths::writablelocation(qstandardpaths::homelocation);
或者

qstandardpaths::standardlocations(qstandardpaths::homelocation);
這兩個方法的區別是 standardlocations() 返回值是 qstringlist。當然對於 homelocation 來說這個 qstringlist 中只有乙個 qstring。

還有另外一種方法,利用 qdir 類的乙個靜態函式:

qdir::homepath();
博主的使用者目錄路徑為:"c:/users/administrator"。

qt 4 中的方法。下面的方法只對 qt 4 有效,qt 5 已經刪除了 storagelocation() 方法。

qdesktopservices::storagelocation(qdesktopservices::desktoplocation);
qt 5 中引入的方法。

qstandardpaths::writablelocation(qstandardpaths::desktoplocation);

qstandardpaths::standardlocations(qstandardpaths::desktoplocation);

通常我們會將程式所需的一些資料存入登錄檔。但是有時需要儲存的資料太多,放在登錄檔中就不適合了。這時我們就要找個專門的地方來放資料。以前我喜歡將資料直接放到程式所在目錄,但是後來發現我的程式執行時經常沒有許可權對這個目錄下的檔案進行寫操作。後來發現其實 qt 早就替我們考慮過這些問題了。

qt 4 中的方法。下面的方法只對 qt 4 有效,qt 5 已經刪除了 storagelocation() 方法。

qdesktopservices::storagelocation(qdesktopservices::datalocation);
qt 5 中引入的方法。

qt 5.5 中引入了另一種方法:

這個方法一般來說和上面的方法得到的結果是相同的。按照 qt 幫助文件的解釋,這個方法可以確保返回的路徑非空。所以我認為應該優先選用這個方法。

qt 4 中的方法。下面的方法只對 qt 4 有效,qt 5 已經刪除了 storagelocation() 方法。

qdesktopservices::storagelocation(qdesktopservices::templocation);
qt 5 中引入的方法。

qstandardpaths::writablelocation(qstandardpaths::templocation);

qstandardpaths::standardlocations(qstandardpaths::templocation);

更傳統的方法是利用 qdir 的乙個靜態函式 temppath()。

qdir::temppath();
至此,常用的各種特殊路徑就介紹的差不多了。剩下還有些不常用的,可以參考 qstandardpaths 類的介紹。

參考:

qt 程式獲取程式所在路徑、使用者目錄路徑、臨時資料夾等特殊路徑的方法

獲取專案所在路徑

取到 http localhost 8080 myproject string basepath request.getscheme request.getservername request.getserverport request.getcontextpath string relativel...

qt 獲取程式相關路徑

可使用一下兩個函式 1.qstringlist qstandardpaths standardlocations qstandardpaths standardlocation type 2.qstring qstandardpaths writablelocation qstandardpaths...

獲取系統特殊路徑如 我的文件,開始路徑等

使用api函式shgetspecialfolderlocation。shlobj.h裡有shgetspecialfolderlocation的原型宣告。這個函式可以幫我們找到windows的桌面目錄 啟動目錄 我的文件目錄等。shgetspecialfolder需要三個引數。第乙個引數是hwnd,它...