#include "EyeMapInfo.h" #include "OneEyeMap.h" #include #include #include AllEyeMapInfo::~AllEyeMapInfo() { } /* 初始化函数 */ void AllEyeMapInfo::initEyeMapInfo() { m_saveFilePath = QApplication::applicationDirPath() + "/config/"; /* 判断文件夹是否存在 */ QDir dir; if(!dir.exists(m_saveFilePath)) { dir.mkpath(m_saveFilePath); } /* 判断文件是否存在 */ QString filePath = m_saveFilePath + m_saveFileName; QFile file(filePath); if(!file.exists()) { SPDLOG_INFO("设置数据文件不存在,创建文件"); createSaveFile(m_saveFileName); } else { readSaveFile(m_saveFileName); } /* 设置可用通道,实际需要根据连接到的示波器个数来设置 */ for(int i = 1; i <= 8; i++) { OneChannelInfo info; info.channel = i; info.channelName = "通道" + QString::number(i); GEyeMapInfo.appendChannelInfo(info); } } /* 读取保存的文件 */ void AllEyeMapInfo::readSaveFile(const QString& fileName) { QString filePath = m_saveFilePath + fileName; QFile file(filePath); if(!file.open(QIODevice::ReadOnly)) { SPDLOG_ERROR("打开文件失败, 文件路径: {}", filePath.toStdString()); return; } QByteArray data = file.readAll(); file.close(); try { listInitEyeMapInfo.clear(); nJson json = nJson::parse(data.toStdString()); nJson jsonArray = json["EyeMapInfo"]; for(const auto& it : jsonArray) { OneEyeMapInfo info; info.num = it["num"]; info.title = QString::fromStdString(it["title"].get()); info.titleBarColor = QColor(QString::fromStdString(it["titleBarColor"].get())); info.isShow = it["isShow"]; info.channelInfo.channel = it["OscChannelNum"].get(); info.channelInfo.channelName = QString::fromStdString(it["OscChannelName"]); info.voltageRange = static_cast(it["voltageRange"]); info.tGridValue = static_cast(it["timeGridValue"]); listInitEyeMapInfo.append(info); } nJson jsonBase = json["BaseInfo"]; row = jsonBase["row"]; column = jsonBase["column"]; } catch (const nJson::parse_error& e) { SPDLOG_ERROR("解析json文件失败, 错误信息:{}, 文件路径: {}", e.what(), filePath.toStdString()); createSaveFile(m_saveFileName); } catch (const nJson::exception& e) { SPDLOG_ERROR("解析json文件失败, 错误信息:{}, 文件路径: {}", e.what(), filePath.toStdString()); createSaveFile(m_saveFileName); } } /* 写入保存的文件 */ void AllEyeMapInfo::createSaveFile(const QString& fileName) { QString filePath = m_saveFilePath + fileName; QFile file(filePath); if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) { SPDLOG_ERROR("打开文件失败,文件路径: {}", filePath.toStdString()); return; } SPDLOG_INFO("创建数据文件成功,文件路径: {}", filePath.toStdString()); /* 设置初始化的数据 */ listInitEyeMapInfo.clear(); for(int i = 0; i < 8; i++) { OneEyeMapInfo info; info.num = i + 1; info.title = "通道" + QString::number(i + 1); info.titleBarColor = QColor("#2D2D31"); info.isShow = false; info.channelInfo.channel = 0; info.channelInfo.channelName = getChannelName(0); info.voltageRange = OscVoltageRange::CR_2V5; info.tGridValue = OscTimeGridValue::TGV_200NS; listInitEyeMapInfo.append(info); } row = 4; column = 2; nJson json0; nJson jsonArray1 = json0.array(); for(const auto& it : listInitEyeMapInfo) { nJson json2; json2["num"] = it.num; json2["title"] = it.title.toStdString(); json2["titleBarColor"] = it.titleBarColor.name().toStdString(); json2["isShow"] = it.isShow; json2["OscChannelNum"] = it.channelInfo.channel; json2["OscChannelName"] = it.channelInfo.channelName.toStdString(); json2["voltageRange"] = static_cast(it.voltageRange); json2["timeGridValue"] = static_cast(it.tGridValue); jsonArray1.push_back(json2); } json0["EyeMapInfo"] = jsonArray1; /* 保存行和列 */ nJson json1; json1["row"] = 4; json1["column"] = 2; json0["BaseInfo"] = json1; auto data = json0.dump(4); file.write(data.c_str()); file.close(); } /* 更新保存的文件 */ void AllEyeMapInfo::updateSaveFile() { QString filePath = m_saveFilePath + m_saveFileName; QFile file(filePath); if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) { SPDLOG_ERROR("打开文件失败, 文件路径: {}", filePath.toStdString()); return; } nJson json0; nJson jsonArray1 = json0.array(); for(const auto& it : listInitEyeMapInfo) { nJson json2; json2["num"] = it.num; json2["title"] = it.title.toStdString(); json2["titleBarColor"] = it.titleBarColor.name().toStdString(); json2["isShow"] = it.isShow; json2["OscChannelNum"] = it.channelInfo.channel; json2["OscChannelName"] = it.channelInfo.channelName.toStdString(); json2["voltageRange"] = static_cast(it.voltageRange); json2["timeGridValue"] = static_cast(it.tGridValue); jsonArray1.push_back(json2); } json0["EyeMapInfo"] = jsonArray1; nJson json1; json1["row"] = row; json1["column"] = column; json0["BaseInfo"] = json1; auto data = json0.dump(4); file.write(data.c_str()); file.close(); } /* 获取眼图列表 */ const QList& AllEyeMapInfo::getEyeMapList() { return listEyeMapPtr; } /* 添加眼图指针 */ void AllEyeMapInfo::addEyeMapPtr(OneEyeMap* ptr) { /* 先查找有没有重复的指针 */ for(auto it = listEyeMapPtr.begin(); it != listEyeMapPtr.end(); it++) { if(*it == ptr) { return; } } listEyeMapPtr.append(ptr); } /* 获取每个眼图的序号、标题和颜色 */ QList AllEyeMapInfo::getEyeMapInfo() { QList list; for(const auto& it : listEyeMapPtr) { OneEyeMapInfo info; info.isShow = it->getShow(); info.num = it->getNum(); info.title = it->getTitle(); info.titleBarColor = it->getTitleBarColor(); info.channelInfo = it->getChannelInfo(); info.voltageRange = it->getVoltageRange(); info.tGridValue = it->getTimeGridValue(); list.append(info); } return list; } /* 根据序号查找指针 */ OneEyeMap* AllEyeMapInfo::findEyeMap(int num) { for(const auto& it : listEyeMapPtr) { if(it->getNum() == num) { return it; } } return nullptr; } /* 更新模块信息 */ void AllEyeMapInfo::updateModuleInfo(OneEyeMapInfo& info) { for(auto& it : listEyeMapPtr) { if(it->getNum() == info.num) { it->updateInfo(info); break; } } } /* 更新设置组屏页面的信息 */ void AllEyeMapInfo::updateSettingNum(OneEyeMapInfo& info) { for(auto& it : listEyeMapPtr) { if(it->getNum() == info.num) { it->updateSettingNum(info); break; } } } /* 更新显示的电压刻度信息,这里只更新电压相关的参数 */ void AllEyeMapInfo::updateVoltageAndTimeGardInfo(const OneEyeMapInfo& info) { for(auto& it : listEyeMapPtr) { if(it->getNum() == info.num) { it->setVoltageRange(info.voltageRange); it->setTimeGridValue(info.tGridValue); break; } } } /* 更新初始化数组 */ void AllEyeMapInfo::updateInitEyeMapInfo() { listInitEyeMapInfo.clear(); for (const auto& it : listEyeMapPtr) { OneEyeMapInfo info; info.num = it->getNum(); info.title = it->getTitle(); info.titleBarColor = it->getTitleBarColor(); info.isShow = it->getShow(); info.channelInfo = it->getChannelInfo(); info.voltageRange = it->getVoltageRange(); info.tGridValue = it->getTimeGridValue(); listInitEyeMapInfo.append(info); } } /* 获取通道号对应的通道名称 */ QString AllEyeMapInfo::getChannelName(int channel) { switch (channel) { case 0: return QString("请选择通道"); case 1: return QString("通道1"); case 2: return QString("通道2"); case 3: return QString("通道3"); case 4: return QString("通道4"); case 5: return QString("通道5"); case 6: return QString("通道6"); case 7: return QString("通道7"); case 8: return QString("通道8"); default: return QString("请选择通道"); } }