diff --git a/src/AnalysTool.pro b/src/AnalysTool.pro index b468633..4772a8c 100644 --- a/src/AnalysTool.pro +++ b/src/AnalysTool.pro @@ -18,6 +18,7 @@ DEFINES += QT_DEPRECATED_WARNINGS include(thirdparty\QtXlsxWriter-0.3.0\src\xlsx\qtxlsx.pri) SOURCES += \ + data/confighandler.cpp \ data/filemanager.cpp \ data/pointcalculate.cpp \ data/txthandler.cpp \ @@ -46,6 +47,7 @@ SOURCES += \ data/xlsxhandler.cpp HEADERS += \ + data/confighandler.h \ data/txthandler.h \ global.h \ data/filemanager.h \ diff --git a/src/data/confighandler.cpp b/src/data/confighandler.cpp new file mode 100644 index 0000000..4fb515a --- /dev/null +++ b/src/data/confighandler.cpp @@ -0,0 +1,95 @@ +#include +#include +#include +#include + +#include "confighandler.h" +#include "logger.h" + +QMap ConfigHandler::_configMap; + +void ConfigHandler::reader() +{ + // 检查文件是否已经存在 + if (QFile::exists(ConConfigFilePath)) { + logde << "config config file existed. "; + }else{ + writer(true); + } + + // 读取JSON文件 + QFile file(ConConfigFilePath); + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)){ + qDebug()<<"file open failed."; + return ; + } + + // 解析JSON数据 + QJsonParseError error; + QJsonDocument doc = QJsonDocument::fromJson(file.readAll(), &error); + if (error.error != QJsonParseError::NoError) { + qDebug() << "JSON解析错误:" << error.errorString(); + return ; + } + + // 读取配置项 + QJsonObject obj = doc.object(); + + _configMap[ConInstrumentCoefficientStr] = QVariant(obj[ConInstrumentCoefficientStr].toDouble()); +} + +void ConfigHandler::createDefaultFile() +{ + logde<<"createDefaultFile"; + + // 创建一个新的 JSON 对象 + QJsonObject obj; + // obj["name"] = "Alice"; + // obj["age"] = 30; + // obj["city"] = "New York"; + + obj[ConInstrumentCoefficientStr] = + ConDefaultMap[ConInstrumentCoefficientStr].toFloat(); + + // 将 QJsonObject 转换为 QJsonDocument + QJsonDocument doc(obj); + + // 打开文件进行写入,如果文件不存在则会自动创建文件 + QFile file(ConConfigFilePath); + if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { + qDebug() << "无法打开文件进行写入!"; + return; + } + + // 将 QJsonDocument 写入文件 + file.write(doc.toJson()); + file.close(); // 确保文件关闭 +} + +void ConfigHandler::writer(const bool writeRealDataFlag) +{ + QJsonObject obj; + + const QMap *mapPtr = &ConDefaultMap; + if(writeRealDataFlag){ + mapPtr = &_configMap; + } + + obj[ConInstrumentCoefficientStr] = + (*mapPtr)[ConInstrumentCoefficientStr].toFloat(); + + // 将 QJsonObject 转换为 QJsonDocument + QJsonDocument doc(obj); + + // 打开文件进行写入,如果文件不存在则会自动创建文件 + QFile file(ConConfigFilePath); + if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { + qDebug() << "无法打开文件进行写入!"; + return; + } + + // 将 QJsonDocument 写入文件 + file.write(doc.toJson()); + file.close(); // 确保文件关闭 +} + diff --git a/src/data/confighandler.h b/src/data/confighandler.h new file mode 100644 index 0000000..d115414 --- /dev/null +++ b/src/data/confighandler.h @@ -0,0 +1,29 @@ +#ifndef JSONHANDLER_H +#define JSONHANDLER_H + +#include + +const QString ConInstrumentCoefficientStr = "InstrumentCoefficient"; + +namespace ConfigHandler { +void reader(); +void createDefaultFile(); +/** + * @brief writer + * @param writeRealDataFlag + * true:Write _configMap content. + * false:Write ConDefaultMap content. + */ +void writer(const bool writeRealDataFlag = true); + +const QString ConConfigFilePath = QDir::currentPath() + "/config.json"; + +const QMap ConDefaultMap = { + {ConInstrumentCoefficientStr, 1.001f}, +}; + +extern QMap _configMap; +} + + +#endif // JSONHANDLER_H diff --git a/src/data/pointcalculate.cpp b/src/data/pointcalculate.cpp index d8bc7a7..2f9763d 100644 --- a/src/data/pointcalculate.cpp +++ b/src/data/pointcalculate.cpp @@ -502,3 +502,18 @@ QPair PointCalculate::getMaxMinValue() return QPair(minDsc, maxDsc); } + +QVector PointCalculate::getDataInXRange(const float x1, const float x2) +{ + QVector targetVtr; + for(const Global::ExperimentData &ed : _dataVtr) { + if(x1 < ed.sampleTemp && ed.sampleTemp < x2){ + targetVtr.push_back(ed); + }else if (ed.sampleTemp > x2){ + break; + } + + } + + return targetVtr; +} diff --git a/src/data/pointcalculate.h b/src/data/pointcalculate.h index a899ce3..ce4750b 100644 --- a/src/data/pointcalculate.h +++ b/src/data/pointcalculate.h @@ -9,6 +9,7 @@ namespace PointCalculate{ void setExperimentData(const QVector&); QPair getStartAndEndPoint(); +QVector getDataInXRange(const float, const float); void setRegionPointX(const float,const float); QPointF getClosestPointByX(const float); diff --git a/src/global.h b/src/global.h index dd1c9c1..10d7b14 100644 --- a/src/global.h +++ b/src/global.h @@ -67,6 +67,7 @@ struct CurveFileData{ struct CurveExperimentData{ QCPCurve * curve; + QString fileName; QVector dataVtr; }; diff --git a/src/main.cpp b/src/main.cpp index 773f91e..6c24162 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -11,6 +11,7 @@ #include "logger.h" #include "xlsxhandler.h" #include "aboutform.h" +#include "confighandler.h" int main(int argc, char *argv[]) { @@ -19,7 +20,18 @@ int main(int argc, char *argv[]) Logger::instance(); logde<<"main..."; + // + ConfigHandler::reader(); + logde<<"config,instrument coefficient:" + <setWindowModality(Qt::ApplicationModal); widget->setWindowFlags(Qt::Dialog); + + widget->setFixedSize(widget->geometry().width(),widget->geometry().height()); } void MainWindow::on_actionStop_triggered() diff --git a/src/ui/aboutform.cpp b/src/ui/aboutform.cpp index 421b78b..40b5b08 100644 --- a/src/ui/aboutform.cpp +++ b/src/ui/aboutform.cpp @@ -9,7 +9,7 @@ AboutForm::AboutForm(QWidget *parent) : { ui->setupUi(this); - setFixedSize(geometry().width(),geometry().height()); +// setFixedSize(geometry().width(),geometry().height()); setWindowTitle("About"); diff --git a/src/ui/centralwidget.cpp b/src/ui/centralwidget.cpp index f24adb7..1152592 100644 --- a/src/ui/centralwidget.cpp +++ b/src/ui/centralwidget.cpp @@ -161,15 +161,15 @@ void CentralWidget::slotRecvCommonData(const CommonData &cd) pEdVtr->push_back(ed); } -void CentralWidget::slotRecvAnalysisFileName(const QString &fileName) +void CentralWidget::slotRecvAnalysisFileName(const QString &filePath) { - qDebug() << "slotRecvAnalysisFileName" << fileName; + qDebug() << "slotRecvAnalysisFileName" << filePath; // todo.禁止重复文件添加。 Global::CurveFileData cfd; - if(XlsxHandler::readFile(fileName,cfd) != 0){ - QMessageBox::warning((QWidget*)this->parent(), "warnning", "File parse error."); - return; + if(XlsxHandler::readFile(filePath,cfd) != 0){ + QMessageBox::warning((QWidget*)this->parent(), "warnning", "File parse error."); + return; } for(int i = 0;i < cfd.phaseTotalVtr.size();i++){ @@ -189,7 +189,6 @@ void CentralWidget::slotRecvAnalysisFileName(const QString &fileName) float absY = std::abs(maxMinPair.first - maxMinPair.second); _customPlot->yAxis->setRange(- absY * 2,absY *2); - // 设置坐标轴标签 _customPlot->yAxis->setLabel("DSC/mW"); _customPlot->xAxis->setLabel("Temp/℃"); @@ -201,13 +200,15 @@ void CentralWidget::slotRecvAnalysisFileName(const QString &fileName) tVtr.push_back(index++); xVtr.push_back(ed.sampleTemp); yVtr.push_back(ed.dsc); - } _currentCurve = new QCPCurve(_customPlot->xAxis, _customPlot->yAxis); _currentCurve->setData(tVtr, xVtr, yVtr); _currentCurve->setSelectable(QCP::stWhole); // 设置曲线可选 + // Add data to global parameter. + QFileInfo fileInfo(filePath); + Global::_curveExperimentDataVtr.push_back({_currentCurve,fileInfo.fileName(),pti.dataVtr}); } _customPlot->replot(); @@ -573,8 +574,6 @@ void CentralWidget::drawText(const QPointF point, const QString text) void CentralWidget::fillGraph(const double x1, const double x2) { - //todo.未寻找x1\x2之间最大值。 - double y1 = PointCalculate::getClosestPointByX(x1).y(); double y2 = PointCalculate::getClosestPointByX(x2).y(); @@ -588,16 +587,24 @@ void CentralWidget::fillGraph(const double x1, const double x2) QCPGraph *mainGraph = _customPlot->addGraph(); mainGraph->setData(xVtr, yVtr); - // 样式配置 mainGraph->setPen(QPen(Qt::red, 1)); -#if 0 - _currentGraph->setBrush(QBrush(Qt::lightGray)); - _currentGraph->setChannelFillGraph(mainGraph); -#endif + QVector curveDataVtr = + PointCalculate::getDataInXRange(x1,x2); + + QCPGraph *fillGraph = _customPlot->addGraph(); + QVector fillX, fillY; + + for(int i = 0;i < curveDataVtr.size();i++){ + Global::ExperimentData &ed = curveDataVtr[i]; + fillX<setData(fillX, fillY); + + fillGraph->setBrush(QBrush(Qt::green, Qt::SolidPattern)); + fillGraph->setChannelFillGraph(mainGraph); - // customPlot->graph(0)->setChannelFillGraph(customPlot->graph(1)); - // _customPlot->graph(1); _customPlot->replot(); } diff --git a/src/ui/enthalpydatacorrectionform.cpp b/src/ui/enthalpydatacorrectionform.cpp index 61e6693..c737576 100644 --- a/src/ui/enthalpydatacorrectionform.cpp +++ b/src/ui/enthalpydatacorrectionform.cpp @@ -7,6 +7,8 @@ EnthalpyDataCorrectionForm::EnthalpyDataCorrectionForm(QWidget *parent) : { ui->setupUi(this); + setWindowTitle("热焓校正"); + // ui->lineEditTheoryIn->setText("28.6"); // ui->lineEditTheorySn->setText("60.5"); // ui->lineEditTheoryBi->setText("53.3"); diff --git a/src/ui/instrumentcoefficientform.cpp b/src/ui/instrumentcoefficientform.cpp index 7b23ee2..2d33162 100644 --- a/src/ui/instrumentcoefficientform.cpp +++ b/src/ui/instrumentcoefficientform.cpp @@ -1,11 +1,19 @@ #include "instrumentcoefficientform.h" #include "ui_instrumentcoefficientform.h" +#include "confighandler.h" InstrumentCoefficientForm::InstrumentCoefficientForm(QWidget *parent) : QWidget(parent), ui(new Ui::InstrumentCoefficientForm) { ui->setupUi(this); + + setWindowTitle("仪器系数"); + + ui->LineEditCoefficient->setText( + QString::number( + ConfigHandler::_configMap[ConInstrumentCoefficientStr].toFloat(), + 'f',3)); } InstrumentCoefficientForm::~InstrumentCoefficientForm() @@ -15,7 +23,14 @@ InstrumentCoefficientForm::~InstrumentCoefficientForm() void InstrumentCoefficientForm::on_pushButtonCalculate_clicked() { + float theory = ui->LineEditTheory->text().toFloat(); + float measure = ui->LineEditActualMeasurement->text().toFloat(); + float instrumentCoefficient = theory/measure; + ConfigHandler::_configMap[ConInstrumentCoefficientStr] = instrumentCoefficient; + ConfigHandler::writer(); + + ui->LineEditCoefficient->setText(QString::number(instrumentCoefficient,'f',3)); } void InstrumentCoefficientForm::on_pushButtonCancel_clicked() diff --git a/src/ui/specificheatcomparisonmethodform.cpp b/src/ui/specificheatcomparisonmethodform.cpp index 58e73d1..4498802 100644 --- a/src/ui/specificheatcomparisonmethodform.cpp +++ b/src/ui/specificheatcomparisonmethodform.cpp @@ -15,17 +15,22 @@ SpecificHeatComparisonMethodForm::SpecificHeatComparisonMethodForm(QWidget *pare { ui->setupUi(this); + setWindowTitle("比热比较法"); + _baseLineLineEdit = new QLineEdit(ui->groupBoxDataFile); _baseLineLabel = new QLabel(ui->groupBoxDataFile); _baseLineLabel->setStyleSheet("background-color: red;"); + _baseLineLabel->setFixedWidth(22); _standardSampleLineEdit = new QLineEdit(ui->groupBoxDataFile); _standardSampleLabel = new QLabel(ui->groupBoxDataFile); _standardSampleLabel->setStyleSheet("background-color: green;"); + _standardSampleLabel->setFixedWidth(22); _sampleLineEdit = new QLineEdit(ui->groupBoxDataFile); _sampleLabel = new QLabel(ui->groupBoxDataFile); _sampleLabel->setStyleSheet("background-color: black;"); + _sampleLabel->setFixedWidth(22); QHBoxLayout *baseLineLayout = new QHBoxLayout; baseLineLayout->addWidget(_baseLineLineEdit); @@ -80,26 +85,38 @@ void SpecificHeatComparisonMethodForm::slotSetCurve(const int type, QCPCurve *c } } -void SpecificHeatComparisonMethodForm::on_pushButtonCalculate_clicked() +void SpecificHeatComparisonMethodForm::showEvent(QShowEvent *event) { auto& curveDataVtr = Global::_curveExperimentDataVtr; - QVector *baseLineDataVtr = nullptr, - *standardSampleDataVtr = nullptr, - *sampleDataVtr = nullptr; + // QVector *baseLineDataVtr = nullptr, + // *standardSampleDataVtr = nullptr, + // *sampleDataVtr = nullptr; for (auto& item : curveDataVtr) { if(item.curve == _baseLineCurve){ - baseLineDataVtr = &(item.dataVtr); + _baseLineLineEdit->setText(item.fileName); + _baseLineDataVtr = &(item.dataVtr); }else if(item.curve == _standardSampleCurve){ - standardSampleDataVtr = &(item.dataVtr); + _standardSampleLineEdit->setText(item.fileName); + _standardSampleDataVtr = &(item.dataVtr); }else if(item.curve == _sampleCurve){ - sampleDataVtr = &(item.dataVtr); + _sampleLineEdit->setText(item.fileName); + _sampleDataVtr = &(item.dataVtr); } } - if(!baseLineDataVtr || - !standardSampleDataVtr|| - !sampleDataVtr){ + if(!_baseLineDataVtr ||!_standardSampleDataVtr|| + !_sampleDataVtr){ + logde<<"Base,standard,sample not selected."; + return; + } + +} + +void SpecificHeatComparisonMethodForm::on_pushButtonCalculate_clicked() +{ + if(!_baseLineDataVtr ||!_standardSampleDataVtr|| + !_sampleDataVtr){ logde<<"Base,standard,sample not selected."; return; } @@ -107,13 +124,13 @@ void SpecificHeatComparisonMethodForm::on_pushButtonCalculate_clicked() // float targetTemperature = ui->LineEditTemperature->text().toFloat(); - PointCalculate::setExperimentData(*baseLineDataVtr); + PointCalculate::setExperimentData(*_baseLineDataVtr); QPointF baseLinePoint = PointCalculate::getClosestPointByX(targetTemperature); - PointCalculate::setExperimentData(*standardSampleDataVtr); + PointCalculate::setExperimentData(*_standardSampleDataVtr); QPointF standardSamplePoint = PointCalculate::getClosestPointByX(targetTemperature); - PointCalculate::setExperimentData(*sampleDataVtr); + PointCalculate::setExperimentData(*_sampleDataVtr); QPointF samplePoint = PointCalculate::getClosestPointByX(targetTemperature); logde<<"baseLinePoint:"< #include +#include "global.h" + namespace Ui { class SpecificHeatComparisonMethodForm; } @@ -25,6 +27,8 @@ public: }; public slots: void slotSetCurve(const int ,QCPCurve*); +protected: + void showEvent(QShowEvent *event) override; private slots: void on_pushButtonCalculate_clicked(); @@ -39,6 +43,11 @@ private: QLabel *_baseLineLabel,*_standardSampleLabel,*_sampleLabel; QCPCurve *_baseLineCurve,*_standardSampleCurve,*_sampleCurve; + + QVector *_baseLineDataVtr , + *_standardSampleDataVtr , + *_sampleDataVtr ; + }; #endif // SPECIFICHEATCOMPARISONMETHODFORM_H