3、Qt--配置文件的使用

server/2024/10/19 7:30:50/

开发平台:Win10 64位

开发环境:Qt Creator 13.0.0 

构建环境:Qt 5.15.2 +MSVC2019 64位

一、需求及方案

        实际开发过程中,我们需要根据本地的配置文件,去配置我们的程序,比如数据库地址、网络地址等信息,而配置文件的格式一般是.ini、.cfg或者.properties类型的,通过Qt官方提供的QSettings类,就可以实现我们的需求,简化了我们开发的难度!

二、实操

.ini文件可以看作是键值对的集合,在文件中以[section]来表示一个区域,然后在该区域中定义多个键值对,格式如下:

[section]

key1=value1

key2=value2

...

其中[section]表示一个区域,比如说[mysql],就表示是mysql的配置信息,下面使用QSrttings类来读取和写入ini文件。

首先我们需要明确配置文件中有什么,这样在初始化的时候就可以直接生成,不用手动去创建配置文件。

#ifndef CONFIGFILE_H
#define CONFIGFILE_H#include <QObject>class configfile
{
public:configfile();//需要一个文件名,不用设置保存路径,会自动生成在exe同级目录下static QString configFileName;//需要用到的配置变量static QString Account;static QString password;static QString remoteIp;static int remotePort;//方法 读写static bool checkConfigFile();static void newConfigFile();static void readConfigFile();static void writeConfigFile();};#endif // CONFIGFILE_H
#include "configfile.h"
#include <QFileInfo>
#include <QSettings>configfile::configfile() {}QString configfile::configFileName="test.ini";
QString configfile::Account="admin";
QString configfile::password="admin";
QString configfile::remoteIp="127.0.0.1";
int configfile::remotePort=502;//首先检擦下存不存在文件,如果不存在就新建,存在就读写操作
bool configfile::isConfigFileExist()
{QFileInfo fileInfo(configfile::configFileName);if(fileInfo.isFile()){//存在情况下,看看内容全不全QFile file(configfile::configFileName);if (file.size() == 0) {configfile::newConfigFile();return false;}//如果配置文件不完整,则以初始值继续运行,并生成配置文件if (file.open(QFile::ReadOnly)) {bool ok = true;while (!file.atEnd()) {QString line = file.readLine();line = line.replace("\r", "");line = line.replace("\n", "");QStringList list = line.split("=");if (list.count() == 2) {if (list.at(1) == "") {ok = false;break;}}}if (!ok) {configfile::newConfigFile();return false;}} else {configfile::newConfigFile();return false;}return true;}else {configfile::newConfigFile();return false;}
}//新建配置文件
void configfile::newConfigFile()
{writeConfigFile();
}//读取配置文件
void configfile::readConfigFile()
{//先判断配置文件是否存在if (!isConfigFileExist()) {return;}QSettings set(configfile::configFileName, QSettings::IniFormat);set.setIniCodec("utf-8");set.beginGroup("mysql");configfile::Account = set.value("Account",configfile::Account).toString();configfile::password = set.value("password",configfile::password).toString();set.endGroup();set.beginGroup("net");configfile::Account = set.value("Account",configfile::Account).toString();configfile::password = set.value("password",configfile::password).toString();set.endGroup();
}//写入配置文件
void configfile::writeConfigFile()
{//下面这段应该会自动生成配置文件?QSettings set(configfile::configFileName, QSettings::IniFormat);set.beginGroup("mysql");set.setValue("Account",configfile::Account);set.setValue("password",configfile::password);set.endGroup();set.beginGroup("net");set.setValue("remoteIp",configfile::remoteIp);set.setValue("remotePort",configfile::remotePort);set.endGroup();
}

三、参考文献

3.1 Qt判断文件、文件夹是否存在,不存在则创建文件夹。_qt 文件不存在则创建-CSDN博客

3.2 Qt基础之配置文件(QSettings) - 浅笑19 - 博客园 (cnblogs.com)


http://www.ppmy.cn/server/38262.html

相关文章

AI终端设备的自动化分级

摘要&#xff1a; 大语言模型&#xff08;LLM&#xff09;被认为是通用人工智能&#xff08;AGI&#xff09;的潜在火花&#xff0c;为构建通用人工智能代理带来了希望。在此基础上&#xff0c;客户端设备在人工智能的帮助下不断发展&#xff0c;从基于应用程序&#xff08;AP…

【微服务】配置管理

Nacos配置管理 配置管理配置共享配置热更新 配置管理 将微服务集群中常用&#xff0c;经常变化的配置都写到一个独立的配置文件微服务中进行统一管理 配置共享 在Nacos的界面当中进行配置管理&#xff0c;在配置列表中添加配置 比如各个服务中的jdbc的连接配置&#xff1a; …

数据库系统理论——关系数据库

文章目录 一、关系&#xff08;数据结构&#xff09;1、概述2、名词解释3、关系模式、关系数据库、关系数据库模式4、基本关系的性质 二、关系操作&#xff08;数据操作&#xff09;三、关系的完整性1、实体完整性2 、参照完整性3、用户自定义的完整性 四、关系代数五、习题 前…

【编程题-错题集】非对称之美(找规律 / 贪心)

牛客对应题目链接&#xff1a;非对称之美 (nowcoder.com) 一、分析题目 找规律&#xff1a; 判断是否全都是相同字符。判断本身是否是回文。 如果这个字符串每个字符相同&#xff0c;不存在非回文子串&#xff0c;直接返回 0。如果这个字符串不是回文&#xff0c;输出字符串长度…

C++:继承-继承权限

在C中&#xff0c;类的权限分为公有、私有和保护三种。这些权限控制了类的成员&#xff08;数据成员和成员函数&#xff09;对外部代码的可见性和访问性。 公有&#xff08;public&#xff09;权限&#xff1a; 在公有权限下声明的成员可以被类的外部代码直接访问&#xff1b;公…

基于微信小程序的网上购物系统的设计与实现

基于微信小程序的网上购物系统的设计与实现 “Design and Implementation of an Online Shopping System based on WeChat Mini Program” 完整下载链接:基于微信小程序的网上购物系统的设计与实现 文章目录 基于微信小程序的网上购物系统的设计与实现摘要第一章 绪论1.1 研究…

AWTK 和 QT 资源占用不完全对比

因为没有开发两个完全一样的应用程序&#xff0c;对比的结果并不是很准确&#xff0c;仅供参考。 对比的程序为&#xff1a; AWTK demoui 演示了 AWTK 常用功能。 QT QDesktop 演示了 QT 常用功能。 运行平台为&#xff1a; i.MX6ULL Linux 1. 可以执行文件大小 1.1 AWTK…

Navigation常见场景解决方案

路由跳转场景 页面跳转是路由最常用的能力&#xff0c;Navigation通过NavPathStack提供了诸多方法&#xff0c;下文以pushDestination方法为例&#xff0c;介绍Navigation的路由跳转相关能力。 页面间跳转 NavPathStack提供了路由管理的能力&#xff0c;通过NavPathStack进行…