QSettings Class:提供與平臺無關的持久性應用程序設置

QSettings Class

QSettings類提供與平臺無關的持久性應用程序設置。

Header: #include <QSettings>
qmake: QT += core
Inherits: QObject

 

 

 

注意:此類中的所有函數都是可重入的。

注意:這些函數也是線程安全的。

 

Public Types:

enum Format { NativeFormat, Registry32Format, Registry64Format, IniFormat, InvalidFormat }
typedef ReadFunc
enum Scope { UserScope, SystemScope }
typedef SettingsMap
enum Status { NoError, AccessError, FormatError }
typedef WriteFunc

 

Public Functions:

  QSettings(QSettings::Scope scope, QObject *parent = nullptr)
  QSettings(QObject *parent = nullptr)
  QSettings(const QString &fileName, QSettings::Format format, QObject *parent = nullptr)
  QSettings(QSettings::Format format, QSettings::Scope scope, const QString &organization, const QString &application = QString(), QObject *parent = nullptr)
  QSettings(QSettings::Scope scope, const QString &organization, const QString &application = QString(), QObject *parent = nullptr)
  QSettings(const QString &organization, const QString &application = QString(), QObject *parent = nullptr)
virtual ~QSettings()
QStringList allKeys() const
QString applicationName() const
void beginGroup(const QString &prefix)
int beginReadArray(const QString &prefix)
void beginWriteArray(const QString &prefix, int size = -1)
QStringList childGroups() const
QStringList childKeys() const
void clear()
bool contains(const QString &key) const
void endArray()
void endGroup()
bool fallbacksEnabled() const
QString fileName() const
QSettings::Format format() const
QString group() const
QTextCodec * iniCodec() const
bool isAtomicSyncRequired() const
bool isWritable() const
QString organizationName() const
void remove(const QString &key)
QSettings::Scope scope() const
void setArrayIndex(int i)
void setAtomicSyncRequired(bool enable)
void setFallbacksEnabled(bool b)
void setIniCodec(QTextCodec *codec)
void setIniCodec(const char *codecName)
void setValue(const QString &key, const QVariant &value)
QSettings::Status status() const
void sync()
QVariant value(const QString &key, const QVariant &defaultValue = QVariant()) const

 

Static Public Members

QSettings::Format defaultFormat()
QSettings::Format registerFormat(const QString &extension, QSettings::ReadFunc readFunc, QSettings::WriteFunc writeFunc, Qt::CaseSensitivity caseSensitivity = Qt::CaseSensitive)
void setDefaultFormat(QSettings::Format format)
void setPath(QSettings::Format format, QSettings::Scope scope, const QString &path)

 

Reimplemented Protected Functions保護方法

virtual bool   event(QEvent *event) override

 

詳細說明:

用戶通常希望應用程序在會話之間記住其設置(窗口大小和位置、選項等)。這些信息通常存儲在Windows的系統註冊表中,以及macOS和iOS的屬性列表文件中。在Unix系統上,在沒有標準的情況下,許多應用程序(包括KDE應用程序)使用INI文本文件。

QSettings是圍繞這些技術的抽象,使您能夠以可移植的方式保存和恢復應用程序設置。它還支持自定義存儲格式。

QSettings的API基於QVariant,使您可以省力地保存大多數基於值的類型,例如QString,QRect和QImage。

如果您需要的只是一個基於非持久性內存的結構,請考慮改用QMap <QString,QVariant>。

基本用法

創建QSettings對象時,必須傳遞公司或組織的名稱以及應用程序的名稱。例如,如果您的產品名爲Star Runner,而您的公司名爲MySoft,則您將按如下方式構造QSettings對象:

QSettings settings("MySoft", "Star Runner");

QSettings對象可以在堆棧或堆上創建(即使用new)。構造和銷燬QSettings對象非常快。

如果您從應用程序中的許多地方使用QSettings,則可能要使用QCoreApplication :: setOrganizationName()和QCoreApplication :: setApplicationName()來指定組織名稱和應用程序名稱,然後使用默認的QSettings構造函數:

    QCoreApplication::setOrganizationName("MySoft");
    QCoreApplication::setOrganizationDomain("mysoft.com");
    QCoreApplication::setApplicationName("Star Runner");
    ...
    QSettings settings;

(在這裏,我們還指定了組織的Internet域。當設置了Internet域時,它將用於macOS和iOS,而不是組織名稱,因爲macOS和iOS應用程序通常使用Internet域來標識自己。如果未設置域,則從組織名稱派生一個僞域。有關詳細信息,請參見下面的平臺特定說明。)

QSettings存儲設置。 每個設置都由一個QString和一個QVariant組成,該QString指定設置的名稱(鍵),該QVariant存儲與該鍵關聯的數據。 要編寫設置,請使用setValue()。 例如:

settings.setValue("editor/wrapMargin", 68);

如果已經存在具有相同鍵的設置,則現有值將被新值覆蓋。 爲了提高效率,更改可能不會立即保存到永久存儲中。 (您始終可以調用sync()提交更改。)

您可以使用value()返回設置的值:

 int margin = settings.value("editor/wrapMargin").toInt();

如果沒有具有指定名稱的設置,則QSettings返回一個空QVariant(可以將其轉換爲整數0)。 您可以通過將第二個參數傳遞給value()來指定另一個默認值:

 int margin = settings.value("editor/wrapMargin", 80).toInt();

要測試給定密鑰是否存在,請調用contains()。 要刪除與鍵關聯的設置,請調用remove()。 要獲取所有鍵的列表,請調用allKeys()。 要刪除所有鍵,請調用clear()。

 

QVariant和GUI類型

由於QVariant是Qt Core模塊的一部分,因此它無法提供對Qt GUI的一部分的數據類型(例如QColor,QImage和QPixmap)的轉換功能。 換句話說,在QVariant中沒有toColor(),toImage()或toPixmap()函數。

相反,您可以使用QVariant :: value()模板函數。 例如:

QSettings settings("MySoft", "Star Runner");
QColor color = settings.value("DataPump/bgcolor").value<QColor>();

對於QVariant支持的所有數據類型,包括與GUI相關的類型,將自動進行逆轉換(例如,從QColor到QVariant):

QSettings settings("MySoft", "Star Runner");
QColor color = palette().background().color();
settings.setValue("DataPump/bgcolor", color);

可以使用QSettings存儲使用qRegisterMetaType()和qRegisterMetaTypeStreamOperators()註冊的自定義類型。

 

Section and Key語法:鍵值和內容語法

設置鍵可以包含任何Unicode字符。 Windows註冊表和INI文件使用不區分大小寫的鍵,而macOS和iOS上的CFPreferences API使用不區分大小寫的鍵。 爲避免可移植性問題,請遵循以下簡單規則:

  • 總是使用相同的情況引用相同的密鑰。
  • 避免使用除大小寫外相同的鍵名。
  • 不要在節名或鍵名中使用斜槓(“/”和“\”);反斜槓字符用於分隔子鍵(見下文)。在windows上,“\”由QSettings轉換爲“/”,這使它們相同。

您可以使用'/'字符作爲分隔符來形成分層鍵,類似於Unix文件路徑。 例如:

    settings.setValue("mainwindow/size", win->size());
    settings.setValue("mainwindow/fullScreen", win->isFullScreen());
    settings.setValue("outputpanel/visible", panel->isVisible());

如果要保存或還原具有相同前綴的許多設置,則可以使用beginGroup()指定前綴,並在末尾調用endGroup()。 這再次是相同的示例,但是這次使用組機制:

    settings.beginGroup("mainwindow");
    settings.setValue("size", win->size());
    settings.setValue("fullScreen", win->isFullScreen());
    settings.endGroup();

    settings.beginGroup("outputpanel");
    settings.setValue("visible", panel->isVisible());
    settings.endGroup();

 

如果使用beginGroup()設置了一個組,則大多數函數的行爲都會改變。 可以遞歸設置組。
除組外,QSettings還支持“數組”概念。 有關詳細信息,請參見beginReadArray()和beginWriteArray()。

 

後備機制

假設您已經創建了一個QSettings對象,其組織名稱爲MySoft,應用程序名稱爲Star Runner。查找值時,將按此順序搜索最多四個位置:

  • Star Runner應用程序的用戶特定位置
  • MySoft所有應用程序的用戶特定位置
  • Star Runner應用程序在系統範圍內的位置
  • MySoft在所有應用程序的系統範圍內的位置

(有關Qt支持的不同平臺上這些位置的信息,請參閱下面的特定於平臺的說明。)

如果在第一個位置找不到密鑰,則在第二個位置繼續搜索,依此類推。 這使您可以存儲系統範圍或組織範圍的設置,並可以基於每個用戶或每個應用程序覆蓋它們。 要關閉此機制,請調用setFallbacksEnabled(false)。

儘管可以從所有四個位置讀取密鑰,但是隻能訪問第一個文件(應用程序的用戶特定位置)進行寫入。 要寫入任何其他文件,請省略應用程序名稱 and/or 指定QSettings :: SystemScope(與默認設置QSettings :: UserScope相對)。

讓我們看一個例子:

    QSettings obj1("MySoft", "Star Runner");
    QSettings obj2("MySoft");
    QSettings obj3(QSettings::SystemScope, "MySoft", "Star Runner");
    QSettings obj4(QSettings::SystemScope, "MySoft");

下表總結了哪些QSettings對象訪問哪個位置。 “ X”表示該位置是與QSettings對象關聯的主要位置,並且用於讀取和寫入。 “ o”表示該位置在讀取時用作備用。

Locations obj1 obj2 obj3 obj4
1. User, Application X      
2. User, Organization o X    
3. System, Application o   X  
4. System, Organization o o o X

這種機制的優點在於,它可以在Qt支持的所有平臺上運行,並且仍然爲您提供了很大的靈活性,而無需您指定任何文件名或註冊表路徑。

如果要在所有平臺上使用INI文件而不是本機API,則可以將QSettings :: IniFormat作爲第一個參數傳遞給QSettings構造函數,然後是範圍,組織名稱和應用程序名稱:

   QSettings settings(QSettings::IniFormat, QSettings::UserScope,
                       "MySoft", "Star Runner");

請注意,從INI文件讀取設置時不會保留類型信息。 所有值將作爲QString返回。

設置編輯器示例可讓您嘗試不同的設置位置,以及啓用或禁用後備機制。

 

恢復GUI應用程序的狀態

QSettings通常用於存儲GUI應用程序的狀態。 下面的示例說明如何使用QSettings保存和還原應用程序主窗口的幾何信息。

void MainWindow::writeSettings()
{
    QSettings settings("Moose Soft", "Clipper");

    settings.beginGroup("MainWindow");
    settings.setValue("size", size());
    settings.setValue("pos", pos());
    settings.endGroup();
}

void MainWindow::readSettings()
{
    QSettings settings("Moose Soft", "Clipper");

    settings.beginGroup("MainWindow");
    resize(settings.value("size", QSize(400, 400)).toSize());
    move(settings.value("pos", QPoint(200, 200)).toPoint());
    settings.endGroup();
}

 

有關爲什麼最好調用QWidget :: resize()和QWidget :: move()而不是QWidget :: setGeometry()來恢復窗口幾何的討論,請參見窗口幾何:Window Geometry 。

必須從主窗口的構造函數和close事件處理程序中調用readSettings()和writeSettings()函數,如下所示:

MainWindow::MainWindow()
{
    ...
    readSettings();
}

void MainWindow::closeEvent(QCloseEvent *event)
{
    if (userReallyWantsToQuit()) {
        writeSettings();
        event->accept();
    } else {
        event->ignore();
    }
}

有關使用QSettings的獨立示例,請參見“應用程序”示例。

 

同時從多個線程或進程訪問設置

QSettings是可重入的。 這意味着您可以同時在不同的線程中使用不同的QSettings對象。 即使QSettings對象引用磁盤上的相同文件(或系統註冊表中的相同條目),該保證仍然有效。 如果通過一個QSettings對象修改了設置,則該更改將立即在任何在同一位置運行且處於同一進程中的其他QSettings對象中可見。

如果滿足某些條件,可以從不同的進程(可以是同時運行的應用程序的不同實例,也可以是不同的應用程序)安全地使用QSettings來讀寫相同的系統位置。 對於QSettings :: IniFormat,它使用諮詢文件鎖定和智能合併算法來確保數據完整性。 工作的條件是可寫配置文件必須是常規文件,並且必須位於當前用戶可以在其中創建新的臨時文件的目錄中。如果不是這種情況,則必須使用setAtomicSyncRequired() 關閉安全裝置。

請注意,sync()導入其他進程所做的更改(除了從此QSettings中寫入更改之外)。

 

平臺特定說明

應用程序設置的存儲位置

如“後備機制”部分所述,QSettings會將應用程序的設置最多存儲在四個位置,具體取決於設置是用戶特定的還是系統範圍的,以及設置是特定於應用程序的還是組織範圍的。 爲了簡單起見,我們假設該組織稱爲MySoft,而該應用程序稱爲Star Runner。

 

在Unix系統上,如果文件格式爲NativeFormat,則默認使用以下文件:

  1. $HOME/.config/MySoft/Star Runner.conf (Qt for Embedded Linux: $HOME/Settings/MySoft/Star Runner.conf)
  2. $HOME/.config/MySoft.conf (Qt for Embedded Linux: $HOME/Settings/MySoft.conf)
  3. for each directory <dir> in $XDG_CONFIG_DIRS: <dir>/MySoft/Star Runner.conf
  4. for each directory <dir> in $XDG_CONFIG_DIRS: <dir>/MySoft.conf

注意:如果未設置XDG_CONFIG_DIRS,則使用/ etc / xdg的默認值。

 

在macOS版本10.2和10.3上,默認情況下使用以下文件:

  1. $HOME/Library/Preferences/com.MySoft.Star Runner.plist
  2. $HOME/Library/Preferences/com.MySoft.plist
  3. /Library/Preferences/com.MySoft.Star Runner.plist
  4. /Library/Preferences/com.MySoft.plist

 

在Windows上,NativeFormat設置存儲在以下註冊表路徑中:

  1. HKEY_CURRENT_USER\Software\MySoft\Star Runner
  2. HKEY_CURRENT_USER\Software\MySoft\OrganizationDefaults
  3. HKEY_LOCAL_MACHINE\Software\MySoft\Star Runner
  4. HKEY_LOCAL_MACHINE\Software\MySoft\OrganizationDefaults

注意:在Windows上,對於以WOW64模式運行的32位程序,設置存儲在以下註冊表路徑中:HKEY_LOCAL_MACHINE \ Software \ WOW6432node。

 


 

如果文件格式爲NativeFormat,則在應用程序的主目錄中爲“ Settings / MySoft / Star Runner.conf”。

如果文件格式爲IniFormat,則在Unix,macOS和iOS上使用以下文件:

  1. $HOME/.config/MySoft/Star Runner.ini (Qt for Embedded Linux: $HOME/Settings/MySoft/Star Runner.ini)
  2. $HOME/.config/MySoft.ini (Qt for Embedded Linux: $HOME/Settings/MySoft.ini)
  3. for each directory <dir> in $XDG_CONFIG_DIRS: <dir>/MySoft/Star Runner.ini
  4. for each directory <dir> in $XDG_CONFIG_DIRS: <dir>/MySoft.ini

注意:如果未設置XDG_CONFIG_DIRS,則使用/ etc / xdg的默認值。

 

在Windows上,使用以下文件:

  1. FOLDERID_RoamingAppData\MySoft\Star Runner.ini
  2. FOLDERID_RoamingAppData\MySoft.ini
  3. FOLDERID_ProgramData\MySoft\Star Runner.ini
  4. FOLDERID_ProgramData\MySoft.ini

以FOLDERID_爲前綴的標識符是特殊項目ID列表,將傳遞給Win32 API函數SHGetKnownFolderPath()以獲得相應的路徑。

FOLDERID_RoamingAppData通常指向C:\ Users \ User Name \ AppData \ Roaming,也由環境變量%APPDATA%顯示。

FOLDERID_ProgramData通常指向C:\ ProgramData。

 

如果文件格式爲IniFormat,則在應用程序的主目錄中爲“ Settings / MySoft / Star Runner.ini”。

.ini和.conf文件的路徑可以使用setPath()進行更改。 在Unix,macOS和iOS上,用戶可以通過設置XDG_CONFIG_HOME環境變量來覆蓋它們。 有關詳細信息,請參見setPath()。

 

直接訪問INI和.plist文件

有時您確實想訪問存儲在特定文件或註冊表路徑中的設置。 在所有平臺上,如果要直接讀取INI文件,則可以使用QSettings構造函數,該構造函數以文件名作爲第一個參數,並傳遞QSettings :: IniFormat作爲第二個參數。 例如:

QSettings settings("/home/petra/misc/myapp.ini",
                   QSettings::IniFormat);

然後,您可以使用QSettings對象讀取和寫入文件中的設置。

 

在macOS和iOS上,您可以通過傳遞QSettings :: NativeFormat作爲第二個參數來訪問屬性列表.plist文件。 例如:

QSettings settings("/Users/petra/misc/myapp.plist",
                   QSettings::NativeFormat);

 

直接訪問Windows註冊表

在Windows上,QSettings允許您訪問在系統註冊表中用QSettings編寫的設置(或受支持格式的設置,例如字符串數據)。 這是通過構造QSettings對象和註冊表中的路徑以及QSettings :: NativeFormat來完成的。例如:

QSettings settings("HKEY_CURRENT_USER\\Software\\Microsoft\\Office",
                   QSettings::NativeFormat);

 

可以照常通過QSettings對象讀取或寫入出現在指定路徑下的所有註冊表項(使用正斜槓而不是反斜槓)。 例如:

settings.setValue("11.0/Outlook/Security/DontTrustInstalledFiles", 0);

 

請注意,如上所述,QSettings使用反斜槓字符來分隔子項。 結果,您不能讀取或寫入包含斜槓或反斜槓的Windows註冊表項; 如果需要,您應該使用本機Windows API。

 

在Windows上訪問通用註冊表設置

在Windows上,鍵可能同時具有值和子鍵。 通過使用“默認”或“”可以訪問其默認值。 代替子項:

settings.setValue("HKEY_CURRENT_USER\\MySoft\\Star Runner\\Galaxy", "Milkyway");
settings.setValue("HKEY_CURRENT_USER\\MySoft\\Star Runner\\Galaxy\\Sun", "OurStar");
settings.value("HKEY_CURRENT_USER\\MySoft\\Star Runner\\Galaxy\\Default"); // returns "Milkyway"

在Windows以外的其他平臺上,“Default”和“.”將被視爲常規子鍵。

 

平臺限制

雖然QSettings嘗試理順不同支持平臺之間的差異,但在移植應用程序時仍應注意一些差異:

  • Windows系統註冊表具有以下限制:子項不能超過255個字符,條目的值不能超過16,383個字符,並且鍵的所有值都不能超過65,535個字符。解決這些限制的一種方法是使用IniFormat而不是NativeFormat存儲設置。
  • 在Windows上,當使用Windows系統註冊表時,QSettings不會保留該值的原始類型。因此,設置新值時,值的類型可能會更改。例如,類型爲REG_EXPAND_SZ的值將更改爲REG_SZ。
  • 在macOS和iOS上,allKeys()將爲適用於所有應用程序的全局設置返回一些額外的鍵。可以使用value()讀取這些鍵,但不能更改它們,只能對其進行陰影處理。調用setFallbacksEnabled(false)將隱藏這些全局設置。
  • 在macOS和iOS上,QSettings使用的CFPreferences API需要Internet域名而不是組織名稱。爲了提供統一的API,QSettings會從組織名稱中得出僞造的域名(除非組織名稱已經是域名,例如OpenOffice.org)。該算法在公司名稱後附加“ .com”,並用連字符替換空格和其他非法字符。如果要指定其他域名,請在main()函數中調用QCoreApplication :: setOrganizationDomain(),QCoreApplication :: setOrganizationName()和QCoreApplication :: setApplicationName(),然後使用默認的QSettings構造函數。另一種解決方案是使用預處理器指令,例如:
#ifdef Q_OS_MAC
    QSettings settings("grenoullelogique.fr", "Squash");
#else
    QSettings settings("Grenoulle Logique", "Squash");
#endif

 

  • 在macOS上,訪問不屬於當前用戶(即SystemScope)的設置的權限已隨10.7(Lion)更改。 在該版本之前,具有管理員權限的用戶可以訪問這些權限。 對於10.7和10.8(Mountain Lion),只有root可以。 但是,10.9(Mavericks)再次更改了該規則,但僅適用於本機格式(plist文件)。

另請參見QVariantQSessionManager設置編輯器示例應用程序示例

 

成員類型文檔

枚舉QSettings :: Format


此枚舉類型指定QSettings使用的存儲格式。

Constant Value Description
QSettings::NativeFormat 0 使用最適合平臺的存儲格式存儲設置。 在Windows上,這意味着系統註冊表。 在macOS和iOS上,這意味着CFPreferences API; 在Unix上,這意味着INI格式的文本配置文件。
QSettings::Registry32Format 2 僅限Windows:從在64位Windows上運行的64位應用程序顯式訪問32位系統註冊表。 在32位Windows上或從64位Windows上的32位應用程序中,其作用與指定NativeFormat相同。 這個枚舉值是在Qt 5.7中添加的。
QSettings::Registry64Format 3 僅限Windows:從在64位Windows上運行的32位應用程序顯式訪問64位系統註冊表。 在32位Windows上或在64位Windows上的64位應用程序中,此操作與指定NativeFormat相同。 這個枚舉值是在Qt 5.7中添加的。
QSettings::IniFormat 1 將設置存儲在INI文件中。 請注意,從INI文件讀取設置時不會保留類型信息。 所有值將作爲QString返回。
QSettings::InvalidFormat 16 registerFormat()返回的特殊值。

在Unix上,NativeFormat和IniFormat的含義相同,不同之處在於文件擴展名不同(.conf用於NativeFormat,.ini用於IniFormat)。

INI文件格式是Qt在所有平臺上都支持的Windows文件格式。 在沒有INI標準的情況下,我們嘗試遵循Microsoft的操作,但以下情況除外:

  • 如果您存儲QVariant無法轉換爲QString的類型(例如QPoint,QRect和QSize),則Qt使用基於@的語法對類型進行編碼。 例如:

pos = @Point(100 100)

爲了最大程度地減少兼容性問題,任何未出現在值的第一個位置或其後沒有Qt類型(點,矩形,大小等)的@均被視爲普通字符。

  • 儘管反斜槓是INI文件中的特殊字符,但是大多數Windows應用程序都不會在文件路徑中轉義反斜槓(\):

windir = C:\Windows

 

QSettings始終將反斜槓視爲特殊字符,並且不提供用於讀取或寫入此類條目的API。

  • INI文件格式對密鑰的語法有嚴格的限制。 Qt通過使用%作爲鍵中的轉義字符來解決此問題。 另外,如果您保存一個頂級設置(其中沒有斜槓的鍵,例如“ someKey”),它將顯示在INI文件的“常規”部分中。 爲避免覆蓋其他鍵,如果使用諸如“ General / someKey”之類的鍵進行保存,則該鍵將位於“%General”部分,而不是“ General”部分。
  • 遵循我們應該在接受的內容上保持自由,在生成的內容上保持保守的理念,QSettings將接受Latin-1編碼的INI文件,但生成純ASCII文件,其中非ASCII值使用標準INI轉義序列進行編碼。 爲了使INI文件更具可讀性(但兼容性可能較低),請調用setIniCodec()。

另請參見registerFormat()setPath()

 

typedef QSettings::ReadFunc


Typedef指向具有以下簽名的函數的指針:

bool myReadFunc(QIODevice &device, QSettings::SettingsMap &map);

ReadFunc在registerFormat()中用作指向讀取一組鍵/值對的函數的指針。 ReadFunc應該一次性讀取所有選項,並返回SettingsMap容器中的所有設置,該容器最初爲空。

另請參見WriteFuncregisterFormat()

 

enum QSettings::Scope


該枚舉指定設置是用戶特定的還是由同一系統的所有用戶共享的。

Constant Value Description
QSettings::UserScope 0 Store settings in a location specific to the current user (e.g., in the user's home directory).
QSettings::SystemScope 1 Store settings in a global location, so that all users on the same machine access the same set of settings.

另請參見setPath()。

 

typedef QSettings::SettingsMap


Typedef for QMap<QStringQVariant>.

另請參見registerFormat()

 

enum QSettings::Status


可以使用以下狀態值:

Constant Value Description
QSettings::NoError 0 沒有發生錯誤。
QSettings::AccessError 1 發生訪問錯誤(例如,嘗試寫入只讀文件)。
QSettings::FormatError 2 發生格式錯誤(例如,加載格式錯誤的INI文件)。

另請參見status()

 

typedef QSettings::WriteFunc


Typedef指向具有以下簽名的函數的指針:

bool myWriteFunc(QIODevice &device, const QSettings::SettingsMap &map);

WriteFunc在registerFormat()中用作指向寫入一組鍵/值對的函數的指針。 WriteFunc僅被調用一次,因此您需要一次性輸出設置。

另請參見ReadFuncregisterFormat()

 

成員函數文檔

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章