【QSettings】QT中读取外部ini文件

用来给rfid设备定义端口及读写地址

// 定义一个config文件,放在下面目录
 QSettings settings("C:/Users/Administrator/.y/config.ini", QSettings::IniFormat);

 settings.beginGroup("PLC1"); // 指定当前操作组,开始组
 QString rfidPort1 = settings.value("rfidPort").toString();
 QString plcAddress1 = settings.value("plcAddress").toString();
 int plcPort1 = settings.value("plcPort").toInt();
 quint16 workpoint1 = settings.value("workpoint").toString().toUInt(nullptr, 16);
 quint16 plcSavePoint1 = settings.value("plcSavePoint").toString().toUInt(nullptr, 16);
 settings.endGroup(); // 结束组

 // 初始化第一个PLC读取器,此时的p是另外定义的一个cpp
 p = new PlcReader(rfidPort1,plcAddress1,plcPort1,workpoint1);
 p->plcSavePoint = plcSavePoint1;
 p->connectToPLC();
 p->waitForSignal();

config文件内容如下:
在这里插入图片描述

<think>我们正在使用Qt框架中的QSettings类来读取INI配置文件中的字符串数据。 根据引用[1],QSettings读写ini文件的步骤为: 1. 通过路径名称打开文件并设定为ini文件格式 2. 读/写数据 3. 关闭文件,删除句柄(实际上,QSettings在析构时会自动保存,但读取不需要显式关闭,通常我们使用完对象后删除即可) 同时,引用[2]和[3]指出,读取中文时可能会出现乱码问题,需要设置编码。建议设置为"UTF-8"或"GB2312",具体取决于文件保存的编码。 因此,示例代码将包括以下步骤: 1. 创建QSettings对象,指定文件路径和格式(IniFormat)。 2. 设置编码(如需要,特别是当文件中有非ASCII字符时)。 3. 使用value()方法读取字符串,可以指定组(section)和键(key)。 4. 将读取的值转换为QString。 注意:INI文件的结构通常包含组(用方括号表示,如[General])和键值对(如"key=value")。 示例INI文件内容(config.ini): [General] appName=我的应用 version=1.0.0 下面我们写一个读取上述配置的示例代码。</think>### Qt QSettings 读取 INI 文件字符串示例代码 以下是使用 Qt 的 `QSettings` 类读取 INI 配置文件中字符串数据的完整示例代码: ```cpp #include <QCoreApplication> #include <QSettings> #include <QDebug> #include <QFile> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // 1. 创建INI配置文件 QFile file("config.ini"); if (file.open(QIODevice::WriteOnly | QIODevice::Text)) { QTextStream out(&file); out << "[Database]\n" << "host=192.168.1.100\n" << "port=3306\n" << "username=admin\n" << "password=安全密码123\n" // 包含中文的字符串 << "\n[AppSettings]\n" << "theme=dark\n" << "language=中文\n"; // 包含中文的字符串 file.close(); } // 2. 创建QSettings对象 QSettings settings("config.ini", QSettings::IniFormat); // 3. 解决中文乱码问题(关键步骤) settings.setIniCodec("UTF-8"); // 必须与文件实际编码一致 // 4. 读取字符串值 // 方法1:直接读取(需指定完整路径) QString dbHost = settings.value("Database/host").toString(); // 方法2:分组读取(推荐) settings.beginGroup("Database"); QString dbPort = settings.value("port", "3306").toString(); // 带默认值 QString dbUser = settings.value("username").toString(); settings.endGroup(); settings.beginGroup("AppSettings"); QString theme = settings.value("theme").toString(); QString language = settings.value("language").toString(); // 读取中文 settings.endGroup(); // 5. 打印结果 qDebug() << "数据库主机:" << dbHost; qDebug() << "数据库端口:" << dbPort; qDebug() << "用户名:" << dbUser; qDebug() << "界面主题:" << theme; qDebug() << "语言设置:" << language; // 正确显示中文 return a.exec(); } ``` ### 关键说明: 1. **中文乱码解决**:必须使用 `setIniCodec("UTF-8")` 指定文件编码(参考引用[2][^2]和引用[3][^3]) 2. **分组访问**:`beginGroup()`/`endGroup()` 可简化键路径访问 3. **默认值设置**:`value("key", defaultValue)` 可防止键不存在时返回空值 4. **文件编码**:确保INI文件实际保存为UTF-8编码(参考引用[2][^2]) 5. **数据类型**:所有值读取后需用 `toString()` 转换为字符串 ### 文件结构示例 (`config.ini`): ```ini [Database] host=192.168.1.100 port=3306 username=admin password=安全密码123 [AppSettings] theme=dark language=中文 ``` ### 输出结果: ``` 数据库主机: "192.168.1.100" 数据库端口: "3306" 用户名: "admin" 界面主题: "dark" 语言设置: "中文" ``` > **注意**:若遇到中文乱码,请检查: > 1. INI文件是否保存为UTF-8编码 > 2. 代码中是否设置了 `setIniCodec("UTF-8")` > 3. 终端/控制台是否支持UTF-8输出(参考引用[2][^2])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值