json文件内容如下:
提取json中内容并存储在相应的变量中:
configPath为json文件的路径
总体流程为:使用QFile从路径打开json文件,QByteArray读取文件内容,QJsonDocument解析json文件,QJsonObject获取json对象,使用contains(“”)函数进行判断,使用.value(“”).toString()进行获取json文件中的内容。
// 读取配置文件内容,存储里面的内容
void ProgramStartup::readConfigFile() {
exePaths.clear(); // 清空之前的路径,避免重复添加
QFile configFile(configPath);
if (!configFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
qDebug() << "无法打开文件:" << configPath;
return;
}
// 读取文件内容
QByteArray fileContent = configFile.readAll();
configFile.close();
// 解析JSON文档
QJsonDocument jsonDoc = QJsonDocument::fromJson(fileContent);
if (jsonDoc.isNull()) {
qDebug() << "解析JSON失败或文件格式不正确:" << configPath;
return;
}
// 获取JSON对象
QJsonObject jsonObj = jsonDoc.object();
// 获取PLC配置
if (jsonObj.contains("plcAddress")) {
plcAddress = jsonObj.value("plcAddress").toString();
qDebug() << "读取到PLC地址:" << plcAddress;
}
if (jsonObj.contains("plcPort")) {
QString portStr = jsonObj.value("plcPort").toString();
plcPort = portStr.toInt(); // 将字符串转换为整数
qDebug() << "读取到PLC端口:" << plcPort;
}
// 获取信号寄存器地址
if (jsonObj.contains("startSignalRegister")) {
startSignalRegister = static_cast<quint16>(jsonObj.value("startSignalRegister").toString().toUInt(nullptr, 16));
qDebug() << "读取到启动信号寄存器地址:" << QString::number(startSignalRegister, 16);
}
if (jsonObj.contains("stopSignalRegister")) {
stopSignalRegister = static_cast<quint16>(jsonObj.value("stopSignalRegister").toString().toUInt(nullptr, 16));
qDebug() << "读取到停止信号寄存器地址:" << QString::number(stopSignalRegister, 16);
}
// 获取以 "exe_path" 开头的键并存储其值
for (const QString &key : jsonObj.keys()) {
if (key.startsWith("exe_path")) {
QString exePath = jsonObj.value(key).toString().trimmed();
if (!exePath.isEmpty()) {
exePaths << exePath; // 存储可执行文件路径
}
}
}
}