Qt下儲存讀寫應用程式設定的三種方法

2022-02-20 16:08:33 字數 2674 閱讀 8302

使用者對應用程式經常有這樣的要求:要求它能記住它的settings,比如視窗大小、位置和密碼等等。有三種方法可以實現:

登錄檔(registry)是windows中的乙個重要的資料庫,用於儲存系統和應用程式的設定資訊。qt提供了乙個qsettings類,在windows平台,它提供了ini檔案讀寫,登錄檔讀寫的功能。而且使用也非常簡單。

qsettings::format有兩種:

讀寫登錄檔的示例如下:

//使用常量字串來指定儲存的登錄檔位置

qsettings settings("hkey_current_user\\software\\aaa",qsettings::nativeformat);

settings.setvalue("test", "11111");//寫鍵值對

qstring value = settings.value("test", "error").tostring();//讀鍵值對

qdebug() << value; //輸出:"11111"

其中aaa是資料夾,登錄檔如下圖:

缺點在於只有windows系統有登錄檔,當在linux系統下就不能使用登錄檔了。

ini檔案格式(initialization file)是某些平台或軟體上的配置檔案的非正式標準,以節(section)和鍵(key)構成,被用來對作業系統或特定程式初始化或進行引數設定。常用於微軟windows作業系統,但除了windows現在很多其他作業系統下面的應用軟體也有.ini檔案。讀寫ini檔案的示例如下:

/*** 寫入密碼和鎖屏時間到配置文字中 ***/

//qsettings建構函式的第乙個引數是ini檔案的路徑,第二個引數表示針對ini檔案,第三個引數可以預設

qsettings *iniwrite = new qsettings("config.ini", qsettings::iniformat);

iniwrite->setvalue("passwd", "123456");

iniwrite->setvalue("locktime", 4);

//寫入完成後刪除指標

delete iniwrite;

/*** 讀取配置檔案中的密碼和鎖屏時間 ***/

//qsettings建構函式的第乙個引數是ini檔案的路徑,第二個引數表示針對ini檔案,第三個引數可以預設

qsettings *iniread = new qsettings("config.ini", qsettings::iniformat);

qstring strpasswd = iniread->value("passwd").tostring();

int intlock = iniread->value("locktime").toint();

//讀入完成後刪除指標

delete iniread;

生成的config.ini檔案內容如下:

[general]

passwd=123456

locktime=4

如果呼叫setvalue函式時,已經存在了同名的key,那麼新的值會覆蓋原來的值。

第三種方法就是使用自定義檔案(例如.txt),例如使用讀寫文字方式儲存」密碼「、」鎖屏時間「等數值時,需要寫入特定行,修改"locktime="後面的鎖屏時間數值,文字內容如下:

passwd=726350

locktime=10

因為讀寫內容不多,所以可以先全部讀取,通過 contains() 來找到包含"locktime="的行,並使用replace加上qregexp替換成從qlineedit輸入的字串,程式如下所示:

/*****************將設定的鎖屏時間數值寫入文字中*****************/

//讀取文字

qfile file(config.ini);

file.open(qiodevice::readonly | qiodevice::text);

qstring strall;

qstring strline;

while (!file.atend())

strall = strall+ strline;

}file.close();

//寫入文字

file.open(qiodevice::writeonly | qiodevice::text | qiodevice::truncate);

file.write(strall.tolatin1());

file.close();

為避免最開始不存在文字的情況下開啟文字失敗,可以先初始化配置文字,程式如下所示:

/******************初始化配置文字******************/

//寫入加密後的密碼和鎖屏時間到配置文字中

qfile file(config.ini);

//第一次開啟程式時檔案不存在,才寫入資料初始化文字

if(!file.exists())

config.txt文字內容如下:

passwd=123456

locktime=4

QT下應用程式開發

一 應用程式的編輯與編譯 從最簡單也是最著名的hello word來學習qt。首先建立helloword.cpp mkdir hello vi helloword.cpp include int main int argc,char argv cd hello 指定交叉編譯器路徑 export pa...

使用QSettings儲存QT應用程式資料

qsettings類提供了持久的跨平台應用程式設定,這些settings一般都是存在系統裡的,比如windows一般都寫在系統登錄檔或者寫ini檔案,mac系統一般都在xml檔案裡,那麼按照一般的標準來說,許多應用程式是用ini檔案來實現的。而qsettings就是提供了一種方便的方法來儲存和恢復應...

QT中使用QSettings儲存應用程式配置資訊

使用qt中的qsettings中的一些方法,以下是我的一些簡單的應用方面,經過測試可行。首先我new了這麼乙個兩個物件,乙個物件我是用來寫入配置檔案的,乙個物件我是用來讀取配置檔案中資訊的 qt中使用qsettings類讀寫ini檔案 qsettings建構函式的第乙個引數是ini檔案的路徑,第二個...