Qt之如何读写INI文件
一、简介
在日常的工作中,有时候需要将部分信息保存到本地,也就是写入到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; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?