Qt 程序獲取程序所在路徑、用戶目錄路徑、臨時文件夾等特殊路徑的方法

Qt 程序獲取程序所在路徑、用戶目錄路徑、臨時文件夾等特殊路徑的方法
經常我們的程序中需要訪問一些特殊的路徑,比如程序所在的路徑、用戶目錄路徑、臨時文件夾等。在 Qt 中實現這幾個功能所用的方法雖然都不難,但是各不相同,每次用到時還要現去查,很不方便。因此就寫了這篇博客,把這幾種需求的實現方式總結了一下。算是個備忘錄吧。

程序所在路徑

獲取程序所在路徑,QCoreApplication 類里就實現了相關的功能:

QString QCoreApplication::applicationDirPath()

比如我們有一個程序在:

C:/Qt/examples/tools/regexp/regexp.exe

那么 qApp->applicationDirPath() 的結果是:

C:/Qt/examples/tools/regexp

如果除了程序所在路徑,我們還想要程序的完整名稱。那么可以這么寫:

qApp->applicationFilePath()

還是上面的例子,結果是:

C:/Qt/examples/tools/regexp/regexp.exe
當前工作目錄

QDir 提供了一個靜態函數 currentPath() 可以獲取當前工作目錄,函數原型如下:

QString 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();

我的文檔路徑
Qt 4 中的方法。
下面的方法只對 Qt 4 有效,Qt 5 已經刪除了 storageLocation() 方法。

QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation);

Qt 5 中引入的方法。

QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation);
QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation);

桌面路徑
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 中引入的方法。

QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
QStandardPaths::standardLocations(QStandardPaths::AppDataLocation);

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

QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation);
QStandardPaths::standardLocations(QStandardPaths::AppConfigLocation);

這個方法一般來說和上面的方法得到的結果是相同的。按照 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();

在這個目錄下生成臨時文件和臨時目錄需要用到另外兩個類: QTemporaryFile 和 QTemporaryDir。就不展開介紹了,大家可以參考 qt 的幫助文檔。

至此,常用的各種特殊路徑就介紹的差不多了。剩下還有些不常用的,可以參考 QStandardPaths 類的介紹。

更多參考

轉載于:https://www.cnblogs.com/ZY-Dream/p/10632967.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/449354.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/449354.shtml
英文地址,請注明出處:http://en.pswp.cn/news/449354.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

搞了個30天學習量化的數據資料,可以bt做全球。數據鏈接白送

待會上傳代碼,資料,打包好了,拿來就能用。累死我了,搞了兩天,必須收費,絕不允許白嫖。不然對不起我熬夜,那么辛苦。 確定后,掃描百度網盤 鏈接:https://pan.baidu.com/s/1C0k6zkjHchFVQaHe4nRMsg?pwd=kkgb 提取碼:kkgb 如何回測k線圖 如何根據形態選股

解決 springboot + JPA + MySQL 表名全大寫 出現 “表不存在” 問題(Table ‘XXX.xxx‘ doesn‘t exist)

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 項目中使用 JPA 和 mysql 。表名是全大寫的。 出現 如下報錯: java.sql.SQLSyntaxErrorException: Table XXX_ms.work_tas…

自學Linux命令的四種方法

本文由 極客范 - 小道空空 翻譯自 Danny Stieben。歡迎加入極客翻譯小組,同我們一道翻譯與分享。轉載請參見文章末尾處的要求。如果你想成為Linux高手,那么掌握一些Linux命令是必不可少的。下面是自學Linux命令的四種方法。 每日提示 學習Linux命令的…

第五周學習總結

第六章: 主要內容: 1.接口 2.實現接口 3.理解接口 4.接口回調 5.接口與多態 6.接口變量做參數 7.面向接口編程 Example6_1: Example6_2: Example6_3: Example6_4: Example6_5: Example6_6: 總結:這章節沒有較大問題,例題也都做了一遍。蠻順利…

Android 設備的CPU類型(通常稱為”ABIs”)

armeabiv-v7a: 第7代及以上的 ARM 處理器。2011年15月以后的生產的大部分Android設備都使用它.arm64-v8a: 第8代、64位ARM處理器,很少設備,三星 Galaxy S6是其中之一。armeabi: 第5代、第6代的ARM處理器,早期的手機用的比較多。x86: 平板、模…

國信證券學習系列(1)

軟件不錯,滿足了我對股票,期貨,期權的全部要求。而且數據可以提供下載,簡直沒話說了。 數據清洗問題,我其實很早以前就在思考這個問題,回測,到底在測什么?什么樣的數據可以用來回測&…

JNA—JNI終結者

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 1.介紹 給大家介紹一個最新的訪問本機代碼的Java框架—JNA。 JNA(Java Native Access)框架是一個開源的Java框架,是SUN公司…

FIFO存儲器

FIFO( First Input First Output)簡單說就是指先進先出。由于微電子技術的飛速發展,新一代FIFO芯片容量越來越大,體積越來越小,價格越來越便宜。作為一種新型大規模集成電路,FIFO芯片以其靈活、方便、高效的特性,逐漸在…

通過8個技巧讓你成為一個超強的Linux終端用戶

本文由 極客范 - minejo 翻譯自 Chris Hoffman。歡迎加入極客翻譯小組,同我們一道翻譯與分享。轉載請參見文章末尾處的要求。使用Linux終端不僅僅是只輸入命令。學習這些基本的技巧,你就會逐漸掌握Bash shell,這個在大多數Linux發行版上默認…

國信證券學習系列(2)

獲取指數池: def init(ContextInfo):#設置股票池stock300 ContextInfo.get_stock_list_in_sector(滬深300)ContextInfo.stock300_weight {}stock300_symbol []stock300_weightlist [] ContextInfo.index_code ContextInfo.stockcode"."ContextInfo.m…

旅游服務商Bikego完成A輪融資,共建創投、馬蜂窩投資

2月26日消息,近日Bikego宣布完成A輪融資,共建創投、北京馬蜂窩之旅國際旅行社投資。目前金額尚未公開。 bikego領趣旅行成立于2016年,是一家目的地日游服務運營商。從內容切入,提供國內自由行客戶的白天玩法解決方案,…

python-flask-1

https://askubuntu.com/questions/244641/how-to-set-up-and-use-a-virtual-python-environment-in-ubuntu 1. virtualenv安裝 sudo apt-get install virtualenv sudo apt install virtualenvwrapper echo "source /usr/share/virtualenvwrapper/virtualenvwrapper.sh&quo…

JSch:Java Secure Channel -- java 代碼實現 ssh 遠程操作

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 JSch 是SSH2的一個純Java實現。 它允許你連接到一個 sshd 服務器,使用端口轉發,X11轉發,文件傳輸等…

國信證券學習系列(3)

日內回轉策略&#xff1a;做T策略 擇時交易&#xff1a; if date[-8:-3] ! 14:55:if macd > 0 and macd_pre < 0:# 根據MACD>0則開倉,小于0則平倉if avaliable > df.iloc[-1, 0] * ContextInfo.Lots * 100:order_shares(ContextInfo.get_universe()[0], ContextIn…

時序數據庫連載系列: 時序數據庫一哥InfluxDB之存儲機制解析

2019獨角獸企業重金招聘Python工程師標準>>> InfluxDB 的存儲機制解析 本文介紹了InfluxDB對于時序數據的存儲/索引的設計。由于InfluxDB的集群版已在0.12版就不再開源&#xff0c;因此如無特殊說明&#xff0c;本文的介紹對象都是指 InfluxDB 單機版 1. InfluxDB 的…

如何在Linux上提高文本的搜索效率

本文由 極客范 - minejo 翻譯自 Xmodulo。歡迎加入極客翻譯小組&#xff0c;同我們一道翻譯與分享。轉載請參見文章末尾處的要求。對于系統管理員或程序員來說&#xff0c;當需要在復雜配置的目錄中或者在大型源碼樹中搜尋特定的文本或模式時&#xff0c;grep類型的工具大概是…

Spring Boot 10:處理Json數據中的null值

Jackson版&#xff1a; /*** Jackson 配置類 對Json數據進行特殊處理** Author YangXuyue* Date 2019/04/02 07:12*/ Configuration public class JacksonConfig {/*** 配置Jackson** param builder* return* Author YangXuyue* Date 2019/04/02 07:14*/BeanPrimaryConditional…

國信證券學習系列(4)

機器學習篇章&#xff0c;本章不過時腳本小子&#xff0c;機器學習最核心的是機器&#xff0c;是模型。 學習&#xff0c;無非就是找些有的沒的因子扔進去&#xff0c;但說實話&#xff0c;機器學習&#xff0c;太過容易過擬合&#xff0c;容易無效化。回測好看的一筆&#xf…

JSch - Java Secure Channel : java 代碼實現服務器遠程操作

一、前言 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 JSch是SSH2的純Java實現 。 JSch允許您連接到sshd服務器并使用端口轉發&#xff0c;X11轉發&#xff0c;文件傳輸等&#xff0…

前嗅ForeSpider教程:數據建表

今天&#xff0c;小編為大家帶來的教程是&#xff1a;如何在前嗅ForeSpider中&#xff0c;進行數據建表操作及各注意事項。主要內容包括&#xff1a;快速建表&#xff0c;自由建表&#xff0c;字段參數&#xff0c;數據表的創建&#xff0c;關聯與刪除&#xff0c;以及表單變更…