From 3a6c5fb642aa432c73c444a6e279bb0b94bce74e Mon Sep 17 00:00:00 2001 From: yuntang <123@qq.com> Date: Mon, 14 Apr 2025 17:11:01 +0800 Subject: [PATCH] 2025-04-14T17:11:00 --- src/AnalysTool.pro | 3 + src/data/filemanager.cpp | 2 +- src/data/filemanager.h | 2 +- src/data/xlsxhandler.cpp | 115 ++++++++++++++++++-- src/data/xlsxhandler.h | 26 +++++ src/defines.h | 3 + src/global.cpp | 10 ++ src/global.h | 84 ++++++++++++-- src/main.cpp | 26 ++--- src/mainwindow.cpp | 25 +++-- src/mainwindow.h | 4 + src/mainwindow.ui | 6 + src/serialport/dataparser.cpp | 3 +- src/serialport/serialport.cpp | 11 +- src/ui/aboutform.cpp | 24 ++++ src/ui/aboutform.h | 25 +++++ src/ui/aboutform.ui | 58 ++++++++++ src/ui/centralwidget.cpp | 41 +++++-- src/ui/experimentsettingform.cpp | 21 +++- src/ui/leftwidget.cpp | 2 +- src/ui/specificheatcomparisonmethodform.cpp | 2 +- 21 files changed, 430 insertions(+), 63 deletions(-) create mode 100644 src/ui/aboutform.cpp create mode 100644 src/ui/aboutform.h create mode 100644 src/ui/aboutform.ui diff --git a/src/AnalysTool.pro b/src/AnalysTool.pro index e9fcc56..796640d 100644 --- a/src/AnalysTool.pro +++ b/src/AnalysTool.pro @@ -22,6 +22,7 @@ SOURCES += \ data/pointcalculate.cpp \ global.cpp \ logger/logger.cpp \ + ui/aboutform.cpp \ ui/rightwidget.cpp \ thirdparty/easylogging/easylogging++.cc \ ui/analysissettingform.cpp \ @@ -48,6 +49,7 @@ HEADERS += \ data/pointcalculate.h \ defines.h \ logger/logger.h \ + ui/aboutform.h \ ui/rightwidget.h \ thirdparty/easylogging/easylogging++.h \ ui/analysissettingform.h \ @@ -70,6 +72,7 @@ HEADERS += \ FORMS += \ mainwindow.ui \ + ui/aboutform.ui \ ui/degreeofcrystallinityform.ui \ ui/degreeofcureform.ui \ ui/experimentsettingform.ui \ diff --git a/src/data/filemanager.cpp b/src/data/filemanager.cpp index 5d001d4..2a11cd3 100644 --- a/src/data/filemanager.cpp +++ b/src/data/filemanager.cpp @@ -7,7 +7,7 @@ namespace FileManager { -Global::ExpeInfo _expeInfo; +Global::ExperimentInfo _expeInfo; QFile _expeFile; void writeExperimentFile(const CommonData &cd) diff --git a/src/data/filemanager.h b/src/data/filemanager.h index 1d472f3..b1b31b2 100644 --- a/src/data/filemanager.h +++ b/src/data/filemanager.h @@ -15,7 +15,7 @@ const QString SampleDataFloder = ExperimentDirPath + "/sample_data"; const QString BaseLineFolder = ExperimentDirPath + "/base_line"; const QString AnalysisStateFolder = ExperimentDirPath + "/analysis_state"; -extern Global::ExpeInfo _expeInfo; +extern Global::ExperimentInfo _expeInfo; extern QFile _expeFile; void createExperimentFile(); diff --git a/src/data/xlsxhandler.cpp b/src/data/xlsxhandler.cpp index 1c11ae2..c6c0611 100644 --- a/src/data/xlsxhandler.cpp +++ b/src/data/xlsxhandler.cpp @@ -12,7 +12,7 @@ void XlsxHandler::readFile(const QString sourceFilePath) // 检查文件是否存在 if(!QFile::exists(sourceFilePath)) { - qDebug() << "文件不存在:" << sourceFilePath; + qDebug() << "xlsx file not existed:" << sourceFilePath; return; } @@ -28,7 +28,7 @@ void XlsxHandler::readFile(const QString sourceFilePath) QXlsx::Worksheet *workSheet = xlsx.currentWorksheet(); if(!workSheet) { - qDebug() << "当前工作表为空。"; + qDebug() << "current sheet is empty."; return; } @@ -44,12 +44,11 @@ void XlsxHandler::readFile(const QString sourceFilePath) int index = 2; Global::ExperimentInfo ei; ei.sampleName = workSheet->cellAt(index++, 2)->value().toString(); - logde << "sample name:" << ei.sampleName.toStdString(); - // return; - ei.sampleWeight = workSheet->cellAt(index++, 2)->value().toString(); + index++; // skip crucible weight. ei.date = workSheet->cellAt(index++, 2)->value().toString(); - ei.operatorName = workSheet->cellAt(index++, 2)->value().toString(); + ei.experimentor = workSheet->cellAt(index++, 2)->value().toString(); + index++; // skip measure type. ei.phaseSize = workSheet->cellAt(index++, 2)->value().toInt(); QVector phaseTotalVtr; @@ -67,12 +66,13 @@ void XlsxHandler::readFile(const QString sourceFilePath) void XlsxHandler::readPhaseData(QXlsx::Worksheet *workSheet, int &startLineIndex, Global::PhaseTotalInfo &phaseTotal) { - // int startLineIndex = 9; + // skip.# Time/min Temp/℃ Voltage/mW startLineIndex++; + // skip.第一段 startLineIndex++; - phaseTotal.phase.cutoff_temp = workSheet->cellAt(startLineIndex++, 2)->value().toFloat(); - phaseTotal.phase.temp_flow = workSheet->cellAt(startLineIndex++, 2)->value().toFloat(); + phaseTotal.phase.cutoff_temp = workSheet->cellAt(startLineIndex++, 2)->value().toDouble(); + phaseTotal.phase.temp_flow = workSheet->cellAt(startLineIndex++, 2)->value().toDouble(); phaseTotal.phase.constant_temp_time_min = (uint16_t)(workSheet->cellAt(startLineIndex++, 2)->value().toInt()); phaseTotal.phase.gas = static_cast(workSheet->cellAt(startLineIndex++, 2)->value().toInt()); @@ -80,18 +80,109 @@ void XlsxHandler::readPhaseData(QXlsx::Worksheet *workSheet, int &startLineIndex for(int i = 0; i < dataSize; i++) { Global::ExperimentData data; - data.runTime = workSheet->cellAt(startLineIndex++, 2)->value().toFloat(); - data.sampleTemp = workSheet->cellAt(startLineIndex++, 3)->value().toFloat(); - data.dsc = workSheet->cellAt(startLineIndex++, 4)->value().toFloat(); + data.runTime = workSheet->cellAt(startLineIndex, 2)->value().toDouble(); + data.sampleTemp = workSheet->cellAt(startLineIndex, 3)->value().toDouble(); + data.dsc = workSheet->cellAt(startLineIndex, 4)->value().toDouble(); phaseTotal.dataVtr.push_back(data); + + startLineIndex++; } } void XlsxHandler::writeFile() { + Global::ExperimentInfo& ei = Global::_experimentInfo; + QXlsx::Document xlsx; xlsx.addSheet("Sheet1"); // 添加一个新的工作表 + + int row = 0; + xlsx.write(row++ , 1, ConFileDataInfo); + + xlsx.write(row , 1, ConSampleName); + xlsx.write(row , 2, ei.sampleName); + row++; + + xlsx.write(row , 1, ConSampleWeight); + xlsx.write(row , 2, ei.sampleWeight); + xlsx.write(row , 3, ConUnitMg); + row++; + + xlsx.write(row , 1, ConCrucibleWeight); + xlsx.write(row , 2, 0); + xlsx.write(row , 3, ConUnitMg); + row++; + + xlsx.write(row , 1, Conexperimenter); + xlsx.write(row , 2, ei.experimentor); + row++; + + xlsx.write(row , 1, ConDate); + xlsx.write(row , 2, ei.date); + row++; + + xlsx.write(row , 1, ConMeasureType); + xlsx.write(row , 2, "样品"); + row++; + + xlsx.write(row , 1, ConPhaseSize); + xlsx.write(row , 2, ei.phaseVtr.size()); + row++; + + // write phase data + int dataSizeRow = 0; + for(int i = 0; i < ei.phaseVtr.size();i++){ + const Phase& phase = ei.phaseVtr.at(i); + + xlsx.write(row , 1, ConPhaseProfix); + xlsx.write(row , 2, ConPhaseHeaderTime); + xlsx.write(row , 3, ConPhaseHeaderTemp); + xlsx.write(row , 4, ConPhaseHeaderVoltage); + row++; + + xlsx.write(row , 1, ConPhaseIndex); + xlsx.write(row , 2, i + 1); + row++; + // phase info + xlsx.write(row , 1, ConPhaseCutoffTemp); + xlsx.write(row , 2, phase.cutoff_temp); + xlsx.write(row , 3, ConUnitDegreeCentigrade); + row++; + + xlsx.write(row , 1, ConPhaseHeatingRate); + xlsx.write(row , 2, phase.temp_flow); + xlsx.write(row , 3, ConUnitDegreeCentigradePerMin); + row++; + + xlsx.write(row , 1, ConPhaseConstantTempTime); + xlsx.write(row , 2, phase.constant_temp_time_min); + xlsx.write(row , 3, ConUnitMin); + row++; + + xlsx.write(row , 1, ConPhaseAtmosphere); + switch(phase.gas){ + case GasType::NC: + xlsx.write(row , 2, "NC"); + break; + case GasType::N2: + xlsx.write(row , 2, "N2"); + break; + case GasType::O2: + xlsx.write(row , 2, "O2"); + break; + default:break; + } + row++; + + // phase data. + dataSizeRow = row; + xlsx.write(row , 1, ConPhaseDataSize); + xlsx.write(row , 2, 0); + row++; + + } + #if 0 // 创建一个新的 Excel 文档 diff --git a/src/data/xlsxhandler.h b/src/data/xlsxhandler.h index f6167ec..650ec5b 100644 --- a/src/data/xlsxhandler.h +++ b/src/data/xlsxhandler.h @@ -13,6 +13,32 @@ namespace XlsxHandler { void readPhaseData(QXlsx::Worksheet*,int& startLineIndex,Global::PhaseTotalInfo&); void writeFile(); + + const QString ConUnitMg = "mg"; + const QString ConUnitDegreeCentigrade = "℃"; + const QString ConUnitDegreeCentigradePerMin = "℃/min"; + const QString ConUnitMin = "min"; + + const QString ConFileDataInfo = "文件数据信息"; + const QString ConSampleName = "样品名称:"; + const QString ConSampleWeight = "样品质量:"; + const QString ConCrucibleWeight = "坩埚质量:"; + const QString Conexperimenter = "实验人员:"; + const QString ConDate = "实验日期:"; + const QString ConMeasureType = "测量类型:"; + const QString ConPhaseSize = "阶段数量:"; + + const QString ConPhaseProfix = "#"; + const QString ConPhaseHeaderTime = "Time/min"; + const QString ConPhaseHeaderTemp = "Temp/℃"; + const QString ConPhaseHeaderVoltage = "Voltage/mW"; + + const QString ConPhaseIndex = "阶段索引:"; + const QString ConPhaseCutoffTemp = "截止温度:"; + const QString ConPhaseHeatingRate = "升温速率:"; + const QString ConPhaseConstantTempTime = "恒温时间:"; + const QString ConPhaseAtmosphere = "气氛:"; + const QString ConPhaseDataSize = "数据个数:"; } #endif // XLSX_H diff --git a/src/defines.h b/src/defines.h index d86d673..05bcc6e 100644 --- a/src/defines.h +++ b/src/defines.h @@ -2,6 +2,7 @@ #define DEFINES_H #include +#include typedef uint8_t uchar; @@ -9,4 +10,6 @@ typedef uint8_t u8; typedef uint16_t u16; typedef uint32_t u32; +const QString ConSoftVersion = "0.9.0"; + #endif // DEFINES_H diff --git a/src/global.cpp b/src/global.cpp index df38175..28e6a51 100644 --- a/src/global.cpp +++ b/src/global.cpp @@ -1,5 +1,13 @@ #include "global.h" +namespace Global { +ExperimentInfo _experimentInfo; +Mode _mode; + +QVector>> _curveDataVtr; +} + +#if 0 Global::Global() { _mode = Global::Mode::Analysis; @@ -29,3 +37,5 @@ void Global::setDeviceConnectionStatus(const Global::DeviceConnectionStatus stat } } #endif + +#endif diff --git a/src/global.h b/src/global.h index 942689b..419c50c 100644 --- a/src/global.h +++ b/src/global.h @@ -7,6 +7,58 @@ #include "protocol.h" +namespace Global { +enum Mode{ + Analysis, + ConnectedToDev, + DeliveredData, + ExperimentStart +}; + +enum DeviceConnectionStatus{ + Disconnected, + Connected +}; + +struct ExperimentData { + float runTime; + float constantTempTime; + float sampleTemp; + float dsc; +}; + +enum TestType{ + OIT, + NoneOIT +}; + +struct ExperimentInfo{ + // experiment info + QString sampleName; + QString sampleWeight; + QString date; + QString experimentor; + // phase info + TestType testType; + GasType initialAtmosPhere; + int phaseSize; + + QVector phaseVtr; +}; + +struct PhaseTotalInfo{ + int phaseIndex; // from 1 to 6. + Phase phase; + QVector dataVtr; +}; + +// +extern QVector>> _curveDataVtr; +extern ExperimentInfo _experimentInfo; +extern Mode _mode; +} + +#if 0 class Global:public QObject { Q_OBJECT @@ -40,22 +92,37 @@ public: float dsc; }; - struct ExpeInfo - { - QString sampleName; - float sampleWeight; - QString date; - QString userName; +// struct ExpeInfo +// { +// QString sampleName; +// float sampleWeight; +// QString date; +// QString userName; +// }; + + enum TestType{ + OIT, + NoneOIT }; + struct ExperimentInfo{ + // experiment info QString sampleName; QString sampleWeight; QString date; - QString operatorName; + QString experimentor; + // phase info + TestType testType; + GasType initialAtmosPhere; int phaseSize; + + QVector phaseVtr; }; + + ExperimentInfo _experimentInfo; + struct PhaseTotalInfo{ - int phaseIndex; + int phaseIndex; // from 1 to 6. Phase phase; QVector dataVtr; }; @@ -70,5 +137,6 @@ private: Mode _mode; DeviceConnectionStatus _deviceConnectStatus; }; +#endif #endif // GLOBAL_H diff --git a/src/main.cpp b/src/main.cpp index c053c4a..fe8ea49 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -14,7 +14,7 @@ int main(int argc, char *argv[]) { QTextCodec *codec = QTextCodec::codecForName("UTF-8"); - QTextCodec::setCodecForLocale(codec); + QTextCodec::setCodecForLocale(codec); Logger::instance(); logde<<"main..."; @@ -25,26 +25,26 @@ int main(int argc, char *argv[]) // MainWindow w; // w.show(); - XlsxHandler::test(); + XlsxHandler::test(); -// FileManager::test(); + // FileManager::test(); -// ExperimentSettingForm es; -// es.show(); + // ExperimentSettingForm es; + // es.show(); -// CentralWidget central; -// central.show(); + // CentralWidget central; + // central.show(); -// SerialPort::parserTest(); + // SerialPort::parserTest(); -// SerialPort sp; + // SerialPort sp; -// RealTimeDataForm r; -// r.show(); + // RealTimeDataForm r; + // r.show(); -// QObject::connect(&sp,&SerialPort::sigSendSerialPortData, -// &r,&RealTimeDataForm::slotRevSerialPortData); + // QObject::connect(&sp,&SerialPort::sigSendSerialPortData, + // &r,&RealTimeDataForm::slotRevSerialPortData); return a.exec(); } diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 8b44781..74e0408 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -22,6 +22,7 @@ MainWindow::MainWindow(QWidget *parent) ,_degreeOfCureForm(new DegreeOfCureForm(this)) ,_OITAutoAnalysisParamForm(new OITAutoAnalysisParamForm(this)) ,_degreeOfCrystallinityForm(new DegreeOfCrystallinityForm(this)) + ,_aboutForm(new AboutForm(this)) { ui->setupUi(this); this->setToolTip("....."); @@ -36,7 +37,7 @@ MainWindow::MainWindow(QWidget *parent) ui->statusbar->showMessage("showMessage show temp message!"); // permenent show QLabel *permenentLabel = new QLabel(this); - permenentLabel->setText("Permanent show!"); + permenentLabel->setText("Software Ver:" + ConSoftVersion); ui->statusbar->addPermanentWidget(permenentLabel); // #if 0 @@ -69,6 +70,7 @@ MainWindow::MainWindow(QWidget *parent) setSubWidgetAttribute(_instrumentCoefficientForm); setSubWidgetAttribute(_OITAutoAnalysisParamForm); setSubWidgetAttribute(_degreeOfCrystallinityForm); + setSubWidgetAttribute(_aboutForm); // setActionEnable(true); @@ -114,8 +116,8 @@ void MainWindow::connections() #endif // mode - connect(Global::instance(), &Global::sigModeModify, - _centralWidget, &CentralWidget::slotModeModify); +// connect(Global::instance(), &Global::sigModeModify, +// _centralWidget, &CentralWidget::slotModeModify); //analysis connect(_leftWidget,&LeftWidget::sigSendAnalysisFileName, _centralWidget,&CentralWidget::slotRecvAnalysisFileName); @@ -171,7 +173,8 @@ void MainWindow::on_actionStop_triggered() FileManager::close(); - Global::instance()->setMode(Global::Mode::Analysis); +// Global::instance()->setMode(Global::Mode::Analysis); + Global::_mode = Global::Mode::Analysis; } void MainWindow::on_actionNew_triggered() @@ -190,12 +193,14 @@ void MainWindow::on_actionStart_triggered() // FileManager::createExperimentFile(); - Global::instance()->setMode(Global::Mode::ExperimentStart); +// Global::instance()->setMode(Global::Mode::ExperimentStart); + Global::_mode = Global::Mode::ExperimentStart; } void MainWindow::on_actionReadOnly_triggered() { - Global::instance()->setMode(Global::Mode::ExperimentStart); +// Global::instance()->setMode(Global::Mode::ExperimentStart); + Global::_mode = Global::Mode::ExperimentStart; SerialPort::instance()->openSp(); } @@ -209,7 +214,8 @@ void MainWindow::on_actionConnectToDev_triggered() if (SerialPort::instance()->openSp()) { setActionEnable(true); - Global::instance()->setMode(Global::Mode::ConnectedToDev); +// Global::instance()->setMode(Global::Mode::ConnectedToDev); + Global::_mode = Global::Mode::ConnectedToDev; QByteArray ba = DataParser::inquirePhaseInfo(); SerialPort::instance()->sendData(ba); @@ -305,3 +311,8 @@ void MainWindow::on_actionDegreeOfCuring_triggered() // _degreeOfCureForm->show(); } + +void MainWindow::on_actionAbout_triggered() +{ + _aboutForm->show(); +} diff --git a/src/mainwindow.h b/src/mainwindow.h index ee21acc..9dcbc17 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -17,6 +17,7 @@ #include "instrumentcoefficientform.h" #include "degreeofcureform.h" #include "oitautoanalysisparamform.h" +#include "aboutform.h" QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } @@ -69,6 +70,8 @@ private slots: void on_actionDegreeOfCuring_triggered(); + void on_actionAbout_triggered(); + private: void connections(); void setActionEnable(const bool); @@ -88,5 +91,6 @@ private: InstrumentCoefficientForm* _instrumentCoefficientForm; DegreeOfCureForm *_degreeOfCureForm; OITAutoAnalysisParamForm* _OITAutoAnalysisParamForm; + AboutForm *_aboutForm; }; #endif // MAINWINDOW_H diff --git a/src/mainwindow.ui b/src/mainwindow.ui index 89ac5ab..4d3f3e8 100644 --- a/src/mainwindow.ui +++ b/src/mainwindow.ui @@ -77,6 +77,7 @@ 帮助 + @@ -247,6 +248,11 @@ 固化度 + + + 关于 + + diff --git a/src/serialport/dataparser.cpp b/src/serialport/dataparser.cpp index 434b164..7e91f32 100644 --- a/src/serialport/dataparser.cpp +++ b/src/serialport/dataparser.cpp @@ -182,7 +182,8 @@ namespace DataParser switch(cd.run_type){ case DeviceRunStatus::Idle: case DeviceRunStatus::Cooling: - Global::instance()->setMode(Global::Mode::Analysis); +// Global::instance()->setMode(Global::Mode::Analysis); + Global::_mode = Global::Mode::Analysis; return true; break; default:break; diff --git a/src/serialport/serialport.cpp b/src/serialport/serialport.cpp index 44e746a..88a5fc1 100644 --- a/src/serialport/serialport.cpp +++ b/src/serialport/serialport.cpp @@ -132,7 +132,7 @@ void SerialPort::slotReadData() // read data if (spp->addr == 0) { - if (Global::Mode::ExperimentStart == Global::instance()->getMode()) + if (Global::Mode::ExperimentStart == Global::_mode) { emit sigSendCommonData(cd); } @@ -172,7 +172,8 @@ void SerialPort::commonDataParser(const int dataLength, const u16 addr, { switch(cd.run_type){ case DeviceRunStatus::Cooling: - Global::instance()->setMode(Global::Mode::Analysis); +// Global::instance()->setMode(Global::Mode::Analysis); + Global::_mode = Global::Mode::Analysis; break; default:break; } @@ -198,10 +199,12 @@ void SerialPort::commonDataParser(const int dataLength, const u16 addr, switch (mode) { case DeviceStartMode::Stop: - Global::instance()->setMode(Global::Mode::Analysis); +// Global::instance()->setMode(Global::Mode::Analysis); + Global::_mode = Global::Mode::Analysis; break; case DeviceStartMode::Start: - Global::instance()->setMode(Global::Mode::ExperimentStart); +// Global::instance()->setMode(Global::Mode::ExperimentStart); + Global::_mode = Global::Mode::ExperimentStart; break; default: break; diff --git a/src/ui/aboutform.cpp b/src/ui/aboutform.cpp new file mode 100644 index 0000000..a065d6a --- /dev/null +++ b/src/ui/aboutform.cpp @@ -0,0 +1,24 @@ +#include "aboutform.h" +#include "ui_aboutform.h" +#include "defines.h" + +AboutForm::AboutForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::AboutForm) +{ + ui->setupUi(this); + + // ui->labelContent->setText(ConSoftVersion); + ui->labelContent->setAlignment(Qt::AlignTop | Qt::AlignLeft); + ui->labelContent->setText(QString("软件版本:%1").arg(ConSoftVersion)); +} + +AboutForm::~AboutForm() +{ + delete ui; +} + +void AboutForm::on_pushButtonClose_clicked() +{ + hide(); +} diff --git a/src/ui/aboutform.h b/src/ui/aboutform.h new file mode 100644 index 0000000..b4a1731 --- /dev/null +++ b/src/ui/aboutform.h @@ -0,0 +1,25 @@ +#ifndef ABOUTFORM_H +#define ABOUTFORM_H + +#include + +namespace Ui { +class AboutForm; +} + +class AboutForm : public QWidget +{ + Q_OBJECT + +public: + explicit AboutForm(QWidget *parent = nullptr); + ~AboutForm(); + +private slots: + void on_pushButtonClose_clicked(); + +private: + Ui::AboutForm *ui; +}; + +#endif // ABOUTFORM_H diff --git a/src/ui/aboutform.ui b/src/ui/aboutform.ui new file mode 100644 index 0000000..3c4d380 --- /dev/null +++ b/src/ui/aboutform.ui @@ -0,0 +1,58 @@ + + + AboutForm + + + + 0 + 0 + 428 + 290 + + + + Form + + + + + 20 + 70 + 131 + 101 + + + + 差示扫描量热仪Logo + + + + + + 150 + 20 + 261 + 251 + + + + TextLabel + + + + + + 300 + 240 + 80 + 20 + + + + 关闭 + + + + + + diff --git a/src/ui/centralwidget.cpp b/src/ui/centralwidget.cpp index ba67398..05492a5 100644 --- a/src/ui/centralwidget.cpp +++ b/src/ui/centralwidget.cpp @@ -45,8 +45,8 @@ CentralWidget::CentralWidget(QWidget *parent) _eventHandler->setEnable(true); _customPlot->installEventFilter(_eventHandler); -// _customPlot->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom | QCP::iSelectPlottables); - _customPlot->setInteractions( QCP::iRangeZoom | QCP::iSelectPlottables); + // _customPlot->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom | QCP::iSelectPlottables); + _customPlot->setInteractions( QCP::iRangeZoom | QCP::iSelectPlottables); connect(_eventHandler,&EventHandler::sigSendLineXCoord, this,&CentralWidget::sigSendLineXCoord); @@ -129,9 +129,35 @@ void CentralWidget::slotRecvCommonData(const CommonData &cd) { qDebug() << "slotRevCommonData"; - _customPlot->graph(0)->addData(cd.sample_temp, cd.dsc); // 添加数据到曲线 - _customPlot->replot(); + if(!_currentCurve){ + _currentCurve = new QCPCurve(_customPlot->xAxis, _customPlot->yAxis); + + Global::_curveDataVtr.clear(); + + Global::_curveDataVtr.push_back(qMakePair>( + _currentCurve, QVector() + )); + } + + QVector& edVtr = Global::_curveDataVtr.first().second; + + Global::ExperimentData ed; + ed.dsc = cd .dsc; + ed.sampleTemp = cd.sample_temp; + ed.runTime = cd.add_run_time; + ed.constantTempTime = cd.add_constan_temp_time; + + edVtr.push_back(ed); + + _currentCurve->addData(cd.sample_temp, cd.dsc); + + // customPlot->xAxis->rescale(); + // customPlot->yAxis->rescale(); + + // _customPlot->graph(0)->addData(cd.sample_temp, cd.dsc); // 添加数据到曲线 + _customPlot->rescaleAxes(); + _customPlot->replot(); // FileManager::writeExperimentFile(cd); } @@ -182,9 +208,8 @@ void CentralWidget::slotRecvAnalysisFileName(const QString &fileName) _currentCurve->setSelectable(QCP::stWhole); // 设置曲线可选 // _currentCurve->setSelectable(QCP::stPlottable); // 设置曲线可选 - Global::instance()->_curveDataVtr.push_back( - qMakePair>( - _currentCurve,_dataVtr)); + Global::_curveDataVtr.push_back(qMakePair>( + _currentCurve,_dataVtr)); // 清除第一个图表上的数据 #if 0 @@ -604,7 +629,7 @@ void CentralWidget::clearData(const CentralWidget::ClearDataMode mode) } // Clear data. - Global::instance()->_curveDataVtr.clear(); + Global::_curveDataVtr.clear(); // Set lines visiable false. _line1->setVisible(false); diff --git a/src/ui/experimentsettingform.cpp b/src/ui/experimentsettingform.cpp index 374d42c..9fa7537 100644 --- a/src/ui/experimentsettingform.cpp +++ b/src/ui/experimentsettingform.cpp @@ -406,12 +406,21 @@ void ExperimentSettingForm::slotConnectToDevice() qDebug() << "ba size:" << ba.size(); emit sigDeliverData(ba); - // Global::instance()->setMode(Global::Mode::ConnectedToDev); + // + Global::ExperimentInfo& ei = Global::_experimentInfo; + ei.phaseVtr = phaseVtr; + ei.sampleName = ui->sampleNameLineEdit->text(); + ei.sampleWeight = ui->sampleWeightLineEdit->text(); + ei.date = ui->dateTimeLineEdit->text(); + ei.experimentor = ui->userLineEdit->text(); -#if 0 - QByteArray startBa = DataParser::setDeviceStartStop(DeviceStartMode::Start); - emit sigConnectToDevice(startBa); -#endif + if(ui->radioButton_OIT->isChecked()){ + ei.testType = Global::TestType::OIT; + } else if(ui->radioButton_OIT_not->isChecked()){ + ei.testType = Global::TestType::NoneOIT; + } + + ei.initialAtmosPhere = (GasType)(ui->comboBox_phase_1_atmosphere->currentIndex()); hide(); } @@ -482,7 +491,7 @@ void ExperimentSettingForm::on_pushButton_deliverData_clicked() FileManager::_expeInfo.sampleName = ui->sampleNameLineEdit->text(); FileManager::_expeInfo.sampleWeight = ui->sampleWeightLineEdit->text().toInt(nullptr, 16); FileManager::_expeInfo.date = ui->dateTimeLineEdit->text(); - FileManager::_expeInfo.userName = ui->userLineEdit->text(); + FileManager::_expeInfo.experimentor = ui->userLineEdit->text(); } void ExperimentSettingForm::slotRecvPhaseInfo(const QByteArray &ba) diff --git a/src/ui/leftwidget.cpp b/src/ui/leftwidget.cpp index 2977b91..209cb50 100644 --- a/src/ui/leftwidget.cpp +++ b/src/ui/leftwidget.cpp @@ -78,7 +78,7 @@ void LeftWidget::initData() void LeftWidget::slotTreeWidgetItemClicked(QTreeWidgetItem *item, int column){ qDebug()<<"item clicked:"<text(0)<getMode()){ + if(Global::Mode::Analysis != Global::_mode){ return; } diff --git a/src/ui/specificheatcomparisonmethodform.cpp b/src/ui/specificheatcomparisonmethodform.cpp index d7dc301..4270c31 100644 --- a/src/ui/specificheatcomparisonmethodform.cpp +++ b/src/ui/specificheatcomparisonmethodform.cpp @@ -82,7 +82,7 @@ void SpecificHeatComparisonMethodForm::slotSetCurve(const int type, QCPCurve *c void SpecificHeatComparisonMethodForm::on_pushButtonCalculate_clicked() { - auto& curveDataVtr = Global::instance()->_curveDataVtr; + auto& curveDataVtr = Global::_curveDataVtr; QVector *baseLineDataVtr = nullptr, *standardSampleDataVtr = nullptr, *sampleDataVtr = nullptr;