QSettingsを使用してQTアプリケーションデータを保存
QSettingsを使用してQTアプリケーションデータを保存
概要
QSettingsクラスは持続的なプラットフォーム間アプリケーション設定を提供しています.これらのsettingsは一般的にシステムに存在します.例えば、windowsは一般的にシステムレジストリやINIファイルに書かれています.macシステムは一般的にXMLファイルに書かれています.一般的な基準では、多くのアプリケーションはINIファイルで実現されています.Qsettingsは、アプリケーションを格納および復元するための便利な方法を提供するsettingsです.
QSettingsのAPIはQvariantに基づいており、Qvariantはデータ型の集合であり、QString、QRec、QImageなどの一般的なQtデータ型の大部分を含む.
1.QSettings書き込みiniファイル
setting.iniファイルの内容は
2.QSettings iniファイルを読む
出力:
3.QSettingsカスタムデータ構造データの読み書き
2つのキー値ペアを使用して、1つのLogin構造体データを保存しました.これにより、保存と付与が面倒になります.構造体を探すことでQdataStream&operator>>とQdataStream&operator<のペアを追加できます.
読み込みは通常の読み込みと同じです
概要
QSettingsクラスは持続的なプラットフォーム間アプリケーション設定を提供しています.これらのsettingsは一般的にシステムに存在します.例えば、windowsは一般的にシステムレジストリやINIファイルに書かれています.macシステムは一般的にXMLファイルに書かれています.一般的な基準では、多くのアプリケーションはINIファイルで実現されています.Qsettingsは、アプリケーションを格納および復元するための便利な方法を提供するsettingsです.
QSettingsのAPIはQvariantに基づいており、Qvariantはデータ型の集合であり、QString、QRec、QImageなどの一般的なQtデータ型の大部分を含む.
1.QSettings書き込みiniファイル
#include
struct Login {
QString userName;
QString password;
};
void main(int argc, char *argv[])
{
// ini
QSettings settings("setting.ini", QSettings::IniFormat);
//
settings.clear();
settings.beginGroup("MAIN FILE INFO");
// setValue
settings.setValue("MAIN/FILE/INFO/exeTitle", "Test");
settings.setValue("curDir", "D:");
settings.endGroup();
// beginGroup '/'
settings.setValue("MAIN/FILE/INFO/exeTitle", "Test");
// [General]
settings.setValue("curDir", "D:");
//
settings.setValue("MAIN/curDir", "D:");
QList logins;
Login login1 = { "inno", "123456" };
Login login2 = { "gyj", "123456" };
logins << login1 << login2;
settings.beginWriteArray("logins");
for (int i = 0; i < logins.size(); ++i) {
settings.setArrayIndex(i);
settings.setValue("userName", logins.at(i).userName);
settings.setValue("password", logins.at(i).password);
}
settings.endArray();
settings.sync();
}
setting.iniファイルの内容は
[MAIN%20FILE%20INFO]
MAIN\FILE\INFO\exeTitle=Test
curDir=D:
[MAIN]
FILE\INFO\exeTitle=Test
curDir=D:
[General]
curDir=D:
[logins]
1\userName=inno
1\password=123456
2\userName=gyj
2\password=123456
size=2
2.QSettings iniファイルを読む
#include
#include
struct Login {
QString userName;
QString password;
};
void main(int argc, char *argv[])
{
QSettings settings("setting.ini", QSettings::IniFormat);
settings.beginGroup("MAIN FILE INFO");
qDebug() << settings.value("MAIN/FILE/INFO/exeTitle").toString();
settings.endGroup();
qDebug() << settings.value("MAIN/FILE/INFO/exeTitle").toString();
qDebug() << settings.value("curDir").toString();
int size = settings.beginReadArray("logins");
for (int i = 0; i < size; ++i) {
settings.setArrayIndex(i);
qDebug() << settings.value("userName").toString();
qDebug() << settings.value("password").toString();
}
settings.endArray();
}
出力:
"Test"
"Test"
"D:"
"inno"
"123456"
"gyj"
"123456"
3.QSettingsカスタムデータ構造データの読み書き
2つのキー値ペアを使用して、1つのLogin構造体データを保存しました.これにより、保存と付与が面倒になります.構造体を探すことでQdataStream&operator>>とQdataStream&operator<のペアを追加できます.
#include
#include
#include
struct Login {
QString userName;
QString password;
};
QDataStream& operator<>(QDataStream& in, Login &obj)
{
in >> obj.userName >> obj.password;
return in;
}
//Q_DECLARE_METATYPE
// QMetaType QVaiant , 。
// 、 、
Q_DECLARE_METATYPE(Login)
void main(int argc, char *argv[])
{
// Login QSettings
qRegisterMetaTypeStreamOperators("Login");
QSettings settings("setting.ini", QSettings::IniFormat);
settings.clear();
Login login = {"inno", "123456" };
settings.setValue("login", QVariant::fromValue(login));
settings.sync();
}
読み込みは通常の読み込みと同じです