- Detailed Description
QSettings類提供了持久的跨平台的應用程序設置。用戶通常期望應用程序記住它的設置(窗口大小、位置等)所有會話。這些信息通常存儲在Windows系統注冊表,OS X和iOS的屬性列表文件中。在Unix系統中,在缺乏標准的情況下,許多應用程序(包括KDE應用程序)使用INI文本文件。QSettings圍繞這些抽象的技術,使我們能夠以便攜的方式保存和恢復應用程序設置。它還支持自定義存儲格式。
QSettings API基於QVariant,可以保存很多基礎的類型,比如 QString、QRect、QImage等。
如果你需要的是一個非持久性的基於內存結構,可以考慮使用QMap < QString, QVariant >代替。 - Basic Usage
當創建一個QSettings對象時,需要指定公司或組織名稱以及產品名稱。舉個例子,產品名稱為StarRunner
公司名稱為MySoft
,那么可以創建如下的QSettings對象:
QSettings settings("MySoft", "Star Runner");
QSettings存儲一系列的設置,每個設置包括指定設置名稱(鍵)的一個字符串和一個與該鍵相關聯的QVariant
存儲數據,使用setValue()
來寫入設置,舉例如下:
settings.setValue("editor/wrapMargin", 68);
如果存在相同的設置鍵,現有的值將被新值覆蓋。為了提高效率,這些變化可能不會被立即保存到永久存儲(可以隨時調用sync()來提交更改)。
可以通過value()
來得到一個設置的值:
int margin = settings.value("editor/wrapMargin").toInt();
如果鍵不存在,QSettings將會返回一個空的QVariant
,這個空的QVariant
可以轉換為整數0。這時,我們可以通過另一個參數來指定默認值:
int margin = settings.value("editor/wrapMargin", 80).toInt();
為了測試一個給定的key是否存在,可以調用call()
函數,可以通過調用remove()
來移除相關的鍵,可以通過調用allKeys()
得到所有的鍵,可以通過調用clear()
來移除所有的鍵。
- Member Function Documentation
QSettings::QSettings(const QString &fileName, QSettings::Format format, QObject *parent = nullptr)
構造一個QSettings對象,用於訪問名為為fileName
的存儲文件。如果文件不存在,則創建文件。
QSettings::Format format
的可取參數為:
Constant | Value | Description |
---|---|---|
QSettings::NativeFormat | 0 | 使用平台最合適的存儲格式設置。在Windows中,使用系統注冊表;OS X和iOS中,使用的是CFPreferences API;在Unix中,使用的是INI格式的文本配置文件 |
QSettings::IniFormat | 1 | 存儲在INI文件中的設置。 |
QSettings::Registry32Format | 2 | Windows only: Explicitly access the 32-bit system registry from a 64-bit application running on 64-bit Windows. On 32-bit Windows or from a 32-bit application on 64-bit Windows, this works the same as specifying NativeFormat. This enum value was added in Qt 5.7. |
QSettings::Registry64Format | 3 | Windows only: Explicitly access the 64-bit system registry from a 32-bit application running on 64-bit Windows. On 32-bit Windows or from a 64-bit application on 64-bit Windows, this works the same as specifying NativeFormat. This enum value was added in Qt 5.7. |
QSettings::InvalidFormat | 16 | Special value returned by registerFormat(). |
void QSettings::setValue(const QString &key, const QVariant &value)
設置value為key的值,如果key已經存在,之前的value值將會被覆蓋。
Eaxmple:
QSettings settings;
settings.setValue("interval", 30);
settings.value("interval").toInt(); // returns 30
settings.setValue("interval", 6.55);
settings.value("interval").toDouble(); // returns 6.55
QVariant value(const QString &key, const QVariant &defaultValue = QVariant()) const
返回key的value,如果key不存在,返回默認值。
Example:
QSettings settings;
settings.setValue("animal/snake", 58);
settings.value("animal/snake", 1024).toInt(); // returns 58
settings.value("animal/zebra", 1024).toInt(); // returns 1024
settings.value("animal/zebra").toInt(); // returns 0