一、简介
在日常的工作中,有时候需要将部分信息保存到本地,也就是写入到INI文件中,便于下次使用;在Qt中可以使用QSetting来进行INI文件的读写。
二、常用函数介绍
(1).void QSettings::beginGroup(const QString & prefix)
相当于在INI文件中添加了一个索引,根据索引的不同,可以读取相对应的值
(2).void QSettings::endGroup()
将组重置为相应的eginGroup()调用之前的状态。
(3).void QSettings::setValue(const QString & key, const QVariant & value)
向INI文件中写入信息,信息以键值对的方式写入到INI文件中,如果key值已经存在了,那么key对应的value值便会被新值覆盖掉。
(4).QVariant QSettings::value(const QString & key, const QVariant & defaultValue = QVariant()) const
从INI文件中读取信息,返回设置键的值,如果设置的键不存在,则返回defaultValue,如果未指定默认的值,则返回默认QVariant()。
(5).QString QSettings::group() const
返回当前的组名
三、INI文件的读写
//从INI文件中读取信息
void MainWindow::read_ini_file()
{
QSettings ini_config("setting.ini", QSettings::IniFormat);
ini_config.beginGroup("main_window");
QString group_name = ini_config.group();
QSize size = ini_config.value("size").toSize();
bool full_screen = ini_config.value("full_screen").toBool();
ini_config.endGroup();
qDebug() << "group_name:" << group_name << "size:" << size << "full_screen:" << full_screen;
}
//向INI文件中写入信息
void MainWindow::write_ini_file()
{
QSettings ini_config("setting.ini", QSettings::IniFormat);
ini_config.beginGroup("main_window");
ini_config.setValue("size", this->size());
ini_config.setValue("full_screen", this->isFullScreen());
ini_config.endGroup();
}
写入结果:
读取结果:
四、数组信息写入到INI文件中
如果某组键多次出现,而且想要都保留下来的话,可以使用下列函数进行读写
(1).void QSettings::beginWriteArray(const QString & prefix, int size = -1)
将前缀添加到当前组并开始写入大小为大小的数组。如果 size 为 -1(默认),则根据写入的条目的索引自动确定。
(2).int QSettings::beginReadArray(const QString & prefix)
将前缀添加到当前组并开始从数组中读取。返回数组的大小。
(3).void QSettings::endArray()
关闭使用 beginReadArray() 或 beginWriteArray() 启动的数组。
//向INI文件中写入信息
void MainWindow::write_ini_file()
{
Login login_infos[2];
login_infos[0].user_name = "test_one";
login_infos[0].password = "Password";
login_infos[1].user_name = "test_two";
login_infos[1].password = "Password123";
QSettings settings("setting.ini", QSettings::IniFormat);
settings.beginWriteArray("logins");
for (int i = 0; i < 2; ++i) {
settings.setArrayIndex(i);
settings.setValue("user_name", login_infos[i].user_name);
settings.setValue("password", login_infos[i].password);
}
settings.endArray();
}
//从INI文件中读取信息
void MainWindow::read_ini_file()
{
QList<Login> logins;
QSettings settings("setting.ini", QSettings::IniFormat);
int size = settings.beginReadArray("logins");
for (int i = 0; i < size; ++i) {
settings.setArrayIndex(i);
Login login;
login.user_name = settings.value("user_name").toString();
login.password = settings.value("password").toString();
logins.append(login);
}
settings.endArray();
foreach (Login info, logins) {
qDebug() << "user_name:" << info.user_name << "password:" << info.password;
}
}
文章转自博客园(TechNomad):https://www.cnblogs.com/TechNomad/p/16639547.html