网站首页 > 博客文章 正文
一、背景
不得不说Qt是一个很强大的类库,不管是做项目还是做产品,Qt自身封装的东西就已经非常全面了,我们今天的这篇文章就是模拟了Qt读写ini文件的一个操作,当然是由于一些外力原因,我们决定自己来完善下这个功能。好的,那么现在就让我们隆重的请出今天的主角--QSettings。这个类能干嘛呢? 答案就是:读写注册表或者读写ini文件,这对于我们做应用程序时记录一些可持久化数据非常有用。
二、QSettings访问ini文件
QSettings访问ini文件相对来说比较简单,我们只需要构造一个QSettings对象,传入文件名称和文件存储格式即可,如图1所示。但同时QSettings也有一些局限,如下:
1、QSettings的编码问题(QTBUG15543、QTBUG19552)
2、QSettings的key不能为中文
3、当在一个嵌套作用域多次构造QSettings时并设置了编码,此时访问文件设置的编码会失效
由于QSettings有一些限制,也就引出了我们这篇文章的内容,使用xml模拟ini文件,下面我们主要分析下怎么使用xml文件模拟ini文件,需要的接口并不多,读、写、新增和删除。
图1 QSettings读写ini
三、xml文件读写
读写xml文件的方式有很多,Qt提供了2种比较常用的方式:DOM和SAX,详情可以参看:Qt学习之XML读写操作小结。初次之外C++还提供了几种库用于操作xml文件,比如:libxml2、tinyXml等。
此处我们模拟的是QSettings读写ini文件,因此使用Qt自带的DOM方式读写xml,操作起来相对容易。
如图2所示,是我们xml文件操作类的几个重要接口和成员,前边4个公有接口分别对应。读、写、新增和删除;成员变量m_filePath表示加载的xml文件路径,m_mItemMap表示2级的ini文件结构
图2 xml文件操作头文件
1、读xml文件
View Code
2、保存xml文件
View Code
3、插入项
1 bool xmlOperate::addItem( const QString & value, const QString & group, const QString & key )
2 {
3 if (value.isEmpty() || group.isEmpty())
4 {
5 return false;
6 }
7
8 if (key.isEmpty())
9 {
10 int count = m_mItemMap[group].size();
11 m_mItemMap[group][QString::number(count)] = value;
12 }
13 else
14 {
15 m_mItemMap[group][key] = value;
16 }
17
18 writeXml(m_filePath);
19
20 return true;
21 }
4、删除项
1 bool xmlOperate::removeItem( const QString & value, const QString & group, const QString & key /*= ""*/ )
2 {
3 if (value.isEmpty() || group.isEmpty())
4 {
5 return false;
6 }
7
8 if (key.isEmpty())
9 {
10 int count = m_mItemMap[group].size();
11 if (count == 0)
12 {
13 return false;
14 }
15
16 auto iter = m_mItemMap[group].begin();
17 while (iter != m_mItemMap[group].end())
18 {
19 if (iter.value() == value)
20 {
21 iter = m_mItemMap[group].erase(iter);
22 }
23 else
24 {
25 ++iter;
26 }
27 }
28 }
29 else
30 {
31 m_mItemMap[group].remove(key);
32 }
33
34 writeXml(m_filePath);
35
36 return true;
37 }
四、示例程序下载
如图3是测试代码生成的测试结果,group相当于ini文件中的一个分组,item表示分组中的一项
图3 测试程序结果
猜你喜欢
- 2024-09-08 Qt 贪吃蛇制作(含源码)(qt编写贪吃蛇)
- 2024-09-08 qt 提示“启动程序失败,路径或者权限错误?”解决方法
- 2024-09-08 电脑文件不小心删除了怎么办?两个方法教你秒恢复
- 2024-09-08 Qt——内存回收(qti内存)
- 2024-09-08 C++跨平台库QT学习 操作Excel(跨平台c++开发工具)
- 2024-09-08 Qt 工程 pro文件(qt工程文件.pro在哪儿找)
- 2024-09-08 Qt中的快捷键汇总(qtcreator快捷键)
- 2024-09-08 Qt中文乱码解决思路(vscode终端中文乱码怎么解决)
- 2024-09-08 Qt5+VS2015编程实例:下拉列表框QComboBox控件使用
- 2024-09-08 Qt编程进阶(87):基于HTTP协议的网络文件下载
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)