Qt下存储读写应用程序设置的三种方法

news2024/12/29 14:16:57

一、简介

  • List item

用户对应用程序经常有这样的要求:要求它能记住它的settings,比如窗口大小、位置和密码等等。有三种方法可以实现:

  • 使用注册表;
  • 使用配置文件(.ini);
  • 使用自定义文件(例如.txt)。

二、使用注册表

注册表(Registry)是Windows中的一个重要的数据库,用于存储系统和应用程序的设置信息。Qt提供了一个QSettings类,在windows平台,它提供了ini文件读写,注册表读写的功能。而且使用也非常简单。
QSettings::Format有两种:

  • QSettings::NativeFormat 在windows平台下可以读写windows注册表;
  • QSettings::IniFormat 可以读写ini格式的配置文件。
    读写注册表的示例如下:
//使用常量字符串来指定保存的注册表位置
QSettings settings("HKEY_CURRENT_USER\\Software\\aaa",QSettings::NativeFormat);
settings.setValue("test", "11111");//写键值对
QString value = settings.value("test", "error").toString();//读键值对
qDebug() << value; //输出:"11111"

其中aaa是文件夹,注册表如下图:

在这里插入图片描述
缺点在于只有windows系统有注册表,当在Linux系统下就不能使用注册表了。

三、使用配置文件(.ini)

INI文件格式(Initialization File)是某些平台或软件上的配置文件的非正式标准,以节(section)和键(key)构成,被用来对操作系统或特定程序初始化或进行参数设置。常用于微软Windows操作系统,但除了windows现在很多其他操作系统下面的应用软件也有.ini文件。读写INI文件的示例如下:

/*** 写入密码和锁屏时间到配置文本中 ***/
//QSettings构造函数的第一个参数是ini文件的路径,第二个参数表示针对ini文件,第三个参数可以缺省
QSettings *IniWrite = new QSettings("config.ini", QSettings::IniFormat);
IniWrite->setValue("passwd", "123456");
IniWrite->setValue("lockTime", 4);
//写入完成后删除指针
delete IniWrite;

/*** 读取配置文件中的密码和锁屏时间 ***/
//QSettings构造函数的第一个参数是ini文件的路径,第二个参数表示针对ini文件,第三个参数可以缺省
QSettings *iniRead = new QSettings("config.ini", QSettings::IniFormat);
QString strPasswd = iniRead->value("passwd").toString();
int intLock = iniRead->value("lockTime").toInt();
//读入完成后删除指针
delete iniRead;

生成的config.ini文件内容如下:

[General]
passwd=123456
lockTime=4

如果调用setValue函数时,已经存在了同名的key,那么新的值会覆盖原来的值。

四、使用自定义文件

第三种方法就是使用自定义文件(例如.txt),例如使用读写文本方式保存”密码“、”锁屏时间“等数值时,需要写入特定行,修改"lockTime="后面的锁屏时间数值,文本内容如下:

passwd=726350
lockTime=10

因为读写内容不多,所以可以先全部读取,通过 contains() 来找到包含"lockTime="的行,并使用replace加上QRegExp替换成从QLineEdit输入的字串,程序如下所示:

/*****************将设置的锁屏时间数值写入文本中*****************/
//读取文本
QFile file(config.txt);
file.open(QIODevice::ReadOnly | QIODevice::Text);
QString strAll;
QString strLine;
while (!file.atEnd())
{
	strLine = file.readLine();
	//找到包含"lockTime="的行,并使用replace加上QRegExp替换成从QLineEdit输入的字串
	if(strLine.contains("lockTime="))
	{
		strLine.replace(QRegExp("lockTime=.*"),QString("lockTime=")+ui->timeDataLabel->text()+"\n");
	}
	strAll = strAll+ strLine;
}
file.close();
//写入文本
file.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate);
file.write(strAll.toLatin1());
file.close();

为避免最开始不存在文本的情况下打开文本失败,可以先初始化配置文本,程序如下所示:

/******************初始化配置文本******************/
//写入加密后的密码和锁屏时间到配置文本中
QFile file(config.txt);
//第一次打开程序时文件不存在,才写入数据初始化文本
if(!file.exists())
{
    //QIODevice::Text模式才能正确写入"\n"  QFile::Truncate覆盖原有文本
    file.open(QIODevice::WriteOnly |QIODevice::Text | QFile::Truncate);
    QTextStream out(&file);
    out << "passwd=" << "123456" + "\n";
    out << "lockTime=" << "4";
    file.close();
}

config.txt文本内容如下:

passwd=123456
lockTime=4

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/657951.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C盘空间不足清理方法 之 Google Chrome 浏览器用户数据迁移和Windows10 默认浏览器路径失效修复

原理分析 将原来C盘的目录拷贝到其他盘&#xff0c;然后用mklink建立一个联接&#xff0c;这里贴下ChatGPT对于三种链接的解释 # 在Windows 10中&#xff0c;mklink是一个命令行工具&#xff0c;用于创建符号链接&#xff08;symbolic link&#xff09;或者硬链接&#xff08…

chatgpt赋能python:Python异常过滤教程:如何正确处理和过滤Python中的异常

Python异常过滤教程&#xff1a;如何正确处理和过滤Python中的异常 介绍 Python是一种非常流行的编程语言&#xff0c;广泛应用于各种应用程序和领域中。在我们编写Python程序的过程中&#xff0c;通常要处理各种异常情况&#xff0c;比如用户输入错误&#xff0c;文件读取错…

CSS查缺补漏之《Web字体、2D/3D变换》

文章略长&#xff0c;慢慢享用&#xff5e; Web字体 css3新增了字体&#xff0c;使得用户不必局限在本计算机中安装的字体&#xff0c;可以使用多种字体&#xff1b; 需要在style中定义font-face规则&#xff1b; font-face { font-family: xxx名字; /* 必选项&#xff0c;自…

ROS2 入门应用 创建启动文件(Python)

ROS2 入门应用 创建启动文件&#xff08;Python&#xff09; 1. 创建功能包2. 添加依赖关系3. 添加启动文件4. 创建启动文件4.1. Python4.2. XML4.3. YAML 5. 编译和运行 1. 创建功能包 用Python、XML或YAML编写的启动文件可以启动和停止不同的节点&#xff0c;以及触发和处理…

设计模式(二十三):行为型之解释器模式

设计模式系列文章 设计模式(一)&#xff1a;创建型之单例模式 设计模式(二、三)&#xff1a;创建型之工厂方法和抽象工厂模式 设计模式(四)&#xff1a;创建型之原型模式 设计模式(五)&#xff1a;创建型之建造者模式 设计模式(六)&#xff1a;结构型之代理模式 设计模式…

chapter8:SpringBoot启动配置原理

尚硅谷SpringBoot顶尖教程 1. 启动流程简介 SpringBoot应用从主启动类启动后的运行流程主要包含下面几个要点&#xff1a; &#xff08;1&#xff09;准备环境 执行ApplicationContextInitializer#initialize()方法&#xff1b;监听器SpringApplicationRunListener回调cont…

ADC 读取电位器旋钮,用回差消除临界值档位跳动

就是比如&#xff0c;用电位器当旋钮做风扇调速&#xff0c;划分出10 个速度档位&#xff0c;对应10 个ADC 转换结果的阈值。如果直接比较阈值&#xff0c;当旋钮拧到临近阈值的地方时&#xff0c;ADC 结果的微小跳动会导致风扇档位在两个级别之间不停左右横跳&#xff0c;因此…

Linux MySQL 索引 事务 存储引擎 死锁

索引&#xff08;面试问得多&#xff09; 索引是一个排序的列表&#xff0c;包含索引字段的值和其相对应的行数据所在的物理地址 作用 加快表的查询速度&#xff0c;还可以对字段排序 如何实现的搜索加速&#xff1f; 没有索引的情况下&#xff0c;要查询某行数据&#xff0c;需…

代码审计——命令执行详解

为方便您的阅读&#xff0c;可点击下方蓝色字体&#xff0c;进行跳转↓↓↓ 01 漏洞描述02 审计要点03 漏洞特征04 漏洞案例05 修复方案 01 漏洞描述 命令注入是指因为系统使用了可以执行命令的危险函数&#xff0c;但是调用这些函数的参数可控&#xff0c;并没有做过滤或过滤不…

Flutter集成Umeng步骤及若干问题总结

由于Flutter项目中用到umeng统计及手机号一键登录功能&#xff0c;但实际集成使用中遇到各种坑&#xff0c;文档及demo却都没有提及&#xff0c;因此写下这篇文章&#xff0c;有遇到同样问题的同学可以参考下。 集成之前&#xff0c;最好先查看一下文档&#xff1a;https://de…

LangChain for LLM Application Development 基于LangChain开发大语言应用模型(上)

以下内容均整理来自deeplearning.ai的同名课程 Location 课程访问地址 DLAI - Learning Platform Beta (deeplearning.ai) 一、什么是LangChain 1、LangChain介绍 LangChain是一个框架&#xff0c;用于开发由大语言模型驱动的应用程序。开发者相信&#xff0c;最强大的、差异…

Ubuntu+Pycharm+QtDesigner,并配置Pyqt5

1. 安装PyQt5 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyqt5 2. 安装ubuntu环境下所需要的依赖包 sudo apt install pyqt5* 3. 安装QtDesigner sudo apt install qttools5-dev-tools 4. 设置Pycharm 步骤&#xff1a; File–>setting–>Tools–&…

ESP32设备驱动-VCNL4040趋近传感器

VCNL4040趋近传感器 文章目录 VCNL4040趋近传感器1、VNCL4040介绍2、硬件准备3、软件准备4、驱动实现1、VNCL4040介绍 VCNL4040 将趋近传感器 (PS)、环境光传感器 (ALS) 和高功率 IRED 集成到一个小型封装中。它通过CMOS工艺将光电二极管、放大器和模数转换电路集成到一个芯片…

Linux->线程库接口

目录 前言&#xff1a; 1 进程和线程 2 线程库接口 2.1 线程库基础理解 2.2 创建线程 2.2 线程资源回收 2.3 线程分离 前言&#xff1a; 本篇主要是对Linux原装线程库的函数接口进行学习&#xff0c;还有一部分的线程概念补充。 1 进程和线程 博主在上一篇文章当中有讲过…

中北大学 - 信息对抗大三下学习课程设计(爬取招标网站,进行招标分析,数据保存execl中)

文章目录 1. 题目描述2. 项目细节分析定时爬取任务思路避免多次爬取数据重复问题网站结构根据爬取信息确认招标地区 3. 项目代码4. 运行截图 1. 题目描述 中北大学信息安全技术爬虫课程设计 题目 5&#xff1a;招投标信息分析系统 &#xff08;20050441 2005031113&#xff09…

Floyd算法图解,C++实现Floyd算法

Floyd算法简介 Floyd算法是一种多源最短路径算法&#xff0c;是利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法&#xff0c;与Dijkstra算法类似。该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特弗洛伊德命名。 时间复杂度&am…

Python模块multiprocessing 实现多进程并发

简介 multiprocessing模块是Python标准库中提供的一个用于实现多进程编程的模块。它基于进程而不是线程&#xff0c;可以利用多核CPU的优势&#xff0c;提高程序的执行效率&#xff0c;同时也可以实现进程间通信和数据共享。 目录 1. 参数说明 1.1. Process&#xff08;控制进…

推荐系统初谈

文章目录 简介推荐系统与搜索引擎发展历史所属领域 推荐系统分类概览基于内容的推荐基于协同过滤的推荐基于内存的协同过滤基于模型的协同过滤基于矩阵分解的推荐 推荐系统的评价指标推荐系统存在的问题参考文献 简介 21年笔记迁移&#xff0c;主要介绍了推荐系统的定义、发展…

【IC设计】ICC1 workshop lab guide 学习笔记

文章目录 Lab1 Data Setup&Basic Flow1.1 Create a Milkyway library1.2 Load the Netlist,TLU,Constraints and Controls1.3 Basic Flow:Design Planning1.4 Bsic Flow:Placement1.5 Basic Flow:CTS1.6 Basic Flow:Routing Design Planning2.1 Load the Design2.2 Initial…

算法刷题-字符串-反转字符串II

简单的反转还不够&#xff0c;我要花式反转 541. 反转字符串II 力扣题目链接 给定一个字符串 s 和一个整数 k&#xff0c;从字符串开头算起, 每计数至 2k 个字符&#xff0c;就反转这 2k 个字符中的前 k 个字符。 如果剩余字符少于 k 个&#xff0c;则将剩余字符全部反转。 …