DSCAnalysisTool/src/mainwindow.cpp
2025-10-14 16:48:51 +08:00

848 lines
28 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <qmessagebox.h>
#include "lowesssmoother.h"
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "global.h"
#include "serialport.h"
#include "dataparser.h"
#include "filemanager.h"
#include "logger.h"
#include "xlsxhandler.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent),
ui(new Ui::MainWindow),
_centralWidget(new CentralWidget(this)),
_leftWidget(new LeftWidget(this)),
_expertmentSettingForm(new ExperimentSettingForm(this)),
_realTimeDataForm(new RealTimeDataForm(this)),
_rightWidget(new QDockWidget(this)),
_analysisSettingWidget(new AnalysisSettingForm(this)),
_contextMenu(new QMenu(this)),
_specificHeatComparisonMethodForm(new SpecificHeatComparisonMethodForm(this)),
_instrumentCoefficientForm(new InstrumentCoefficientForm(this)),
_degreeOfCureForm(new DegreeOfCureForm(this)),
_OITAutoAnalysisParamForm(new OITAutoAnalysisParamForm(this)),
_degreeOfCrystallinityForm(new DegreeOfCrystallinityForm(this)),
_aboutForm(new AboutForm(this)),
_enthalpyDataCorrectionForm(new EnthalpyDataCorrectionForm(this)),
_coefficientSelectionForm(new CoefficientSelectionForm(this)),
_printPreviewForm(new PrintPreviewForm(this)),
_axisSettingForm(new AxisSettingForm(this)),
_manuallyStopTheExperimentFlag(false) {
ui->setupUi(this);
ui->actionOITAutoAnalysisMode->setVisible(false);
this->setToolTip(".....");
ui->actionSaveas->setVisible(false);
setCentralWidget(_centralWidget);
addDockWidget(Qt::LeftDockWidgetArea, _leftWidget);
addDockWidget(Qt::RightDockWidgetArea, _rightWidget);
_rightWidget->setWidget(_analysisSettingWidget);
_rightWidget->hide();
//
ui->statusbar->showMessage("showMessage show temp message!");
// permenent show
QLabel *permenentLabel = new QLabel(this);
permenentLabel->setText("Software Ver:" + qApp->applicationVersion());
ui->statusbar->addPermanentWidget(permenentLabel);
ui->actionTimeAxisAnalysisPCTMode->setCheckable(true);
//
setSubWidgetAttribute(_expertmentSettingForm);
setSubWidgetAttribute(_specificHeatComparisonMethodForm);
setSubWidgetAttribute(_realTimeDataForm);
setSubWidgetAttribute(_degreeOfCureForm);
setSubWidgetAttribute(_instrumentCoefficientForm);
setSubWidgetAttribute(_OITAutoAnalysisParamForm);
setSubWidgetAttribute(_degreeOfCrystallinityForm);
setSubWidgetAttribute(_aboutForm);
setSubWidgetAttribute(_enthalpyDataCorrectionForm);
setSubWidgetAttribute(_coefficientSelectionForm);
setSubWidgetAttribute(_printPreviewForm);
setSubWidgetAttribute(_axisSettingForm);
//
setActionEnable(true);
_eventHandler = _centralWidget->getEvnetHandler();
//
connections();
//
// ui->actionStop->setEnabled(false);
}
MainWindow::~MainWindow() {
delete ui;
}
void MainWindow::slotContextMenuShow(const QPoint point) {
_contextMenu->exec(point);
}
void MainWindow::slotUpdateStatusbarMsg(const QString msg) {
ui->statusbar->showMessage(msg);
}
void MainWindow::slotOITAutoAnalysis(const double x1, const double x2) {
on_actionStop_triggered();
_centralWidget->setAnalysisMode(CentralWidget::AnalysisMode::OIT);
_centralWidget->setVerticalLineRange(x1, x2);
}
void MainWindow::slotStartExperiment() {
startExperimentByDeviceInfo();
}
void MainWindow::closeEvent(QCloseEvent *event) {
// 弹出确认对话框
QMessageBox::StandardButton reply;
reply = QMessageBox::question(this, "确认退出", "你确定要退出吗?",
QMessageBox::Yes | QMessageBox::No);
if (reply == QMessageBox::Yes) {
event->accept(); // 接受关闭事件,关闭窗口
} else {
event->ignore(); // 忽略关闭事件,不关闭窗口
}
}
void MainWindow::connections() {
// ui
connect(_expertmentSettingForm, &ExperimentSettingForm::sigDeliverData,
SerialPort::instance(), &SerialPort::slotDeliverData);
#if 1
// SerialPort.
connect(SerialPort::instance(), &SerialPort::sigSendCommonData,
_centralWidget, &CentralWidget::slotRecvCommonData);
connect(SerialPort::instance(), &SerialPort::sigSendCommonData,
_realTimeDataForm, &RealTimeDataForm::slotRevCommonData);
connect(SerialPort::instance(), &SerialPort::sigSendCommonDataToRealDataForm,
_realTimeDataForm, &RealTimeDataForm::slotRevCommonData);
connect(SerialPort::instance(), &SerialPort::sigSendPhaseInfo,
_expertmentSettingForm, &ExperimentSettingForm::slotRecvPhaseInfo);
connect(SerialPort::instance(), &SerialPort::sigAxisModify,
_centralWidget, &CentralWidget::slotAxisModify);
connect(SerialPort::instance(), &SerialPort::sigUpdateStatusbarMsg,
this, &MainWindow::slotUpdateStatusbarMsg);
connect(SerialPort::instance(), &SerialPort::sigSaveExperimentalDataMsgBox,
this, &MainWindow::slotSaveExperimentalDataMsgBox);
connect(SerialPort::instance(), &SerialPort::sigStartExperiment,
this, &MainWindow::slotStartExperiment);
connect(SerialPort::instance(), &SerialPort::sigDeviceDisconnected,
this, &MainWindow::slotDeviceDisconnected);
#endif
// mode
// connect(Global::instance(), &Global::sigModeModify,
// _centralWidget, &CentralWidget::slotModeModify);
// analysis
connect(_leftWidget, &LeftWidget::sigSendAnalysisFileName,
_centralWidget, &CentralWidget::slotRecvAnalysisFileName);
connect(_centralWidget, &CentralWidget::sigSendLineXCoord,
_analysisSettingWidget, &AnalysisSettingForm::slotRecvLineXCoord);
connect(_analysisSettingWidget, &AnalysisSettingForm::sigApply,
_centralWidget, &CentralWidget::slotAnalysisSettingApply);
connect(_analysisSettingWidget, &AnalysisSettingForm::sigUndo,
_centralWidget, &CentralWidget::slotAnalysisSettingUndo);
connect(_analysisSettingWidget, &AnalysisSettingForm::sigConfirm,
_centralWidget, &CentralWidget::slotAnalysisSettingConfirm);
connect(_analysisSettingWidget, &AnalysisSettingForm::sigCancel,
_centralWidget, &CentralWidget::slotAnalysisSettingCancel);
connect(_centralWidget, &CentralWidget::sigRightDockWidgetHide,
[&]() { _rightWidget->hide(); });
connect(_degreeOfCrystallinityForm, &DegreeOfCrystallinityForm::sigDrawCustomText,
_centralWidget, &CentralWidget::slotDrawCustomText);
connect(_specificHeatComparisonMethodForm, &SpecificHeatComparisonMethodForm::sigDrawCustomText,
_centralWidget, &CentralWidget::slotDrawCustomText);
// SpecificHeatComparisonMethodForm
connect(_eventHandler, &EventHandler::sigSetCurve,
_specificHeatComparisonMethodForm,
&SpecificHeatComparisonMethodForm::slotSetCurve);
// Axis settings.
connect(_axisSettingForm, &AxisSettingForm::sigGetAxisInfo,
_centralWidget, &CentralWidget::slotGetAxisInfo);
connect(_centralWidget, &CentralWidget::sigGetAxisInfoWithData,
_axisSettingForm, &AxisSettingForm::slotGetAxisInfoWithData);
connect(_axisSettingForm, &AxisSettingForm::sigSetAxisSettings,
_centralWidget, &CentralWidget::slotSetAxisSettings);
// OIT
connect(OITAutoAnalysis::getInstance(), &OITAutoAnalysis::sigExperimentStop,
this, &MainWindow::slotOITAutoAnalysis);
}
void MainWindow::setActionEnable(const bool flag) {
if (flag) {
ui->actionNew->setEnabled(true);
ui->actionStart->setEnabled(true);
ui->actionStop->setEnabled(true);
ui->actionRealTimeWidget->setEnabled(true);
} else {
ui->actionNew->setEnabled(false);
ui->actionStart->setEnabled(false);
ui->actionStop->setEnabled(false);
ui->actionRealTimeWidget->setEnabled(false);
}
}
void MainWindow::setSubWidgetAttribute(QWidget *widget) {
widget->setWindowModality(Qt::ApplicationModal);
widget->setWindowFlags(Qt::Dialog);
widget->setFixedSize(widget->geometry().width(), widget->geometry().height());
}
#if 0
bool MainWindow::saveExperimentFile(const QString fileName)
{
QString localFileName = fileName;
if(fileName.isEmpty()){
localFileName = "new";
}
QString xlsxfilePath = Global::SampleDataFloder + "/" + localFileName + ".xlsx";
QString filePath = QFileDialog::getSaveFileName(nullptr, "Save experiment file",
xlsxfilePath, "Excel Files (*.xlsx)");
logde<<"filePath:"<<filePath.toStdString();
if (filePath.isEmpty()) {
qDebug() << "User cancel the operation.";
return false;
}
XlsxHandler::writeFile(filePath);
return true;
}
bool MainWindow::saveAnalysisFile(const QString fileName)
{
QString localFileName = fileName;
if(fileName.isEmpty()){
localFileName = "new";
}
QString xlsxfilePath = Global::AnalysisStateFolder + "/" + localFileName + ".xlsx";
QString filePath = QFileDialog::getSaveFileName(nullptr, "Save experiment file",
xlsxfilePath, "Excel Files (*.xlsx)");
logde<<"filePath:"<<filePath.toStdString();
if (filePath.isEmpty()) {
qDebug() << "User cancel the operation.";
return false;
}
XlsxHandler::writeAnalysisOperation(filePath);
return true;
}
#endif
bool MainWindow::saveFile(const QString fileName, const Global::Mode mode,
QString &finalFileName, const bool autoSaveFlag) {
logde << "save file...";
QString localFileName = fileName;
if (fileName.isEmpty()) {
localFileName = "new";
}
QString folder;
if (mode == Global::Mode::None) {
folder = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation);
} else if (mode == Global::Mode::Analysis) {
folder = Global::AnalysisStateFolder;
} else if (mode == Global::Mode::Experiment) {
folder = Global::SampleDataFloder;
}
QString filePath;
if (autoSaveFlag) {
localFileName = _leftWidget->filePathCheck(fileName, folder);
filePath = folder + "/" + localFileName + ".xlsx";
} else {
QString xlsxfilePath = folder + "/" + localFileName + ".xlsx";
filePath = QFileDialog::getSaveFileName(nullptr, "Save experiment file",
xlsxfilePath, "Excel Files (*.xlsx)");
}
//
finalFileName = localFileName + ".xlsx";
logde << "filePath:" << filePath.toStdString();
if (filePath.isEmpty()) {
qDebug() << "User cancel the operation.";
return false;
}
// Save file.
if (mode == Global::Mode::Analysis) {
if (Global::_curveFileDataVtr.empty()) {
// 分析模式下,但是文件数据为空,说明做完实验没有保存数据。
XlsxHandler::writeExperimentFile(filePath);
} else {
// 分析模式下,存在文件数据,将文件数据写入文件。
XlsxHandler::writeXlsxFile(filePath);
#if 0
// 分析模式下,直接保存从文件读取来的数据。
if(Global::_smoothnessFlag){
XlsxHandler::writeSmoothnessFile(filePath);
}else{
// 直接在xlsx文件的基础上添加分析数据。
XlsxHandler::xlsxFileAppendAnalysisOperation(filePath);
}
#endif
}
} else if (mode == Global::Mode::Experiment) {
XlsxHandler::writeExperimentFile(filePath);
}
return true;
}
void MainWindow::smoothness(const int level) {
logde << "smoothness...";
slotUpdateStatusbarMsg("数据平滑计算中...");
if (!Global::_curveExperimentDataVtr.empty()) {
// 当前数据为实验数据时,需要把所有的当前实验数据都进行平滑处理。
// 删除所有objectName为experiment的curve.
_centralWidget->deleteCurveByObjectName(Global::ObjectNameExperiemnt);
// 添加所有平滑后的curve.
for (auto &item : Global::_curveExperimentDataVtr) {
item.smoothDataVtr = smoothnessDetail(level, item.dataVtr);
item.curve = _centralWidget->addCurveData(item.smoothDataVtr,
Global::ObjectNameExperiemnt);
}
} else {
// 当前数据为文件分析数据时,需要把当前文件下的所有数据都进行平滑处理。
QString selectedCurveObjectName = _centralWidget->getCurrentCurve()->objectName();
_centralWidget->deleteCurveByObjectName(selectedCurveObjectName);
for (Global::CurveFileData &cfd : Global::_curveFileDataVtr) {
if (selectedCurveObjectName.contains(cfd.filePath)) {
for (Global::PhaseTotalInfo &pti : cfd.phaseTotalVtr) {
pti.smoothDataVtr = smoothnessDetail(level, pti.dataVtr);
pti.curve = _centralWidget->addCurveData(pti.smoothDataVtr,
cfd.filePath);
}
}
}
}
}
QVector<Global::ExperimentData> MainWindow::smoothnessDetail(const int level, const QVector<Global::ExperimentData> &dataVtr) {
Lowess::Config config;
config.smoothingFactor = level * 0.01;
config.robustnessIterations = 3;
std::vector<double> x;
std::vector<double> y;
for (const Global::ExperimentData &ed : dataVtr) {
if (Global::_axisMode == Global::AxisMode::SingleY) {
x.push_back(ed.sampleTemp);
} else {
x.push_back(ed.runTime);
}
y.push_back(ed.dsc);
}
slotUpdateStatusbarMsg("数据平滑计算中...");
QVector<Global::ExperimentData> resultVtr;
logde << "smooth start...";
logde << "x,y size:" << x.size() << "," << y.size();
ui->statusbar->showMessage("数据平滑计算中...");
ui->statusbar->showMessage("数据平滑计算中...");
ui->statusbar->showMessage("数据平滑计算中...");
ui->statusbar->showMessage("数据平滑计算中...");
std::vector<double> yest = Lowess::smooth(x, y, config);
if (yest.empty()) {
slotUpdateStatusbarMsg("数据平滑完成.");
return resultVtr;
}
slotUpdateStatusbarMsg("数据平滑完成.");
logde << "smooth end...";
// result data vector.
for (int i = 0; i < x.size(); i++) {
Global::ExperimentData ed;
if (Global::_axisMode == Global::AxisMode::SingleY) {
ed.sampleTemp = x.at(i);
ed.runTime = dataVtr.at(i).runTime;
} else {
ed.runTime = x.at(i);
ed.sampleTemp = dataVtr.at(i).sampleTemp;
}
ed.dsc = yest.at(i);
ed.constantTempTime = dataVtr.at(i).constantTempTime;
resultVtr.push_back(ed);
}
return resultVtr;
}
void MainWindow::smoothnessExperimentData(const int level) {
#if 0
for(int i = 0;i < Global::_curveExperimentDataVtr.size();i++){
Global::CurveExperimentData ced = Global::_curveExperimentDataVtr.at(i);
smoothnessDetail()
}
#endif
for (auto &item : Global::_curveExperimentDataVtr) {
smoothnessDetail(level, item.dataVtr);
}
}
void MainWindow::startExperiment() {
QByteArray ba = DataParser::setDeviceStartStop(DeviceStartMode::Start);
QString hexData = ba.toHex(' ');
SerialPort::instance()->slotSendData(ba);
Global::_mode = Global::Mode::Experiment;
_manuallyStopTheExperimentFlag = false;
_centralWidget->startExperiment();
// 清除数据action变灰
ui->actionClearAllData->setEnabled(false);
// 分析menu变灰
ui->menu_4->menuAction()->setEnabled(false);
}
void MainWindow::startExperimentByDeviceInfo() {
Global::_mode = Global::Mode::Experiment;
_manuallyStopTheExperimentFlag = false;
_centralWidget->startExperiment();
// 实验开始,清除上一个实验所有数据。
Global::clearExperimentData();
}
void MainWindow::on_actionStop_triggered() {
logde << " Stop experiment ...++++++++++++++++++";
if (!SerialPort::instance()->isOpen()) {
showMesgBox("设备未连接,请先连接设备。");
return;
}
if (Global::_mode == Global::Mode::Experiment) {
QByteArray ba = DataParser::setDeviceStartStop(DeviceStartMode::Stop);
SerialPort::instance()->slotSendData(ba);
// Set software mode to analysis.
_manuallyStopTheExperimentFlag = true;
logde << "_manuallyStopTheExperimentFlag:" << _manuallyStopTheExperimentFlag;
Global::_mode = Global::Mode::Analysis;
// Save data.
#if 1
logde << "on_actionStop_triggered saveFile ...";
QString finalFileName;
if (saveFile(Global::_experimentInfo.sampleName, Global::Mode::Experiment, finalFileName, true)) {
_leftWidget->reloadFileName();
QString str = QString("%1 文件保存成功。").arg(finalFileName);
QMessageBox::information(this, "文件保存", str, QMessageBox::Yes);
}
#endif
}
// 清除数据action恢复功能
ui->actionClearAllData->setEnabled(true);
// 分析menu恢复功能
ui->menu_4->menuAction()->setEnabled(true);
}
void MainWindow::on_actionNew_triggered() {
if (!SerialPort::instance()->isOpen()) {
showMesgBox("设备未连接,请先连接设备。");
return;
}
_expertmentSettingForm->show();
}
void MainWindow::on_actionStart_triggered() {
logde << "start experiment,set soft into experiment mode.";
logde << "```````````````````````````````";
if (!SerialPort::instance()->isOpen()) {
showMesgBox("设备未连接,请先连接设备。");
return;
}
on_actionClearAllData_triggered();
startExperiment();
}
void MainWindow::on_actionReadOnly_triggered() {
Global::_mode = Global::Mode::Experiment;
SerialPort::instance()->openSp();
}
void MainWindow::on_actionRealTimeWidget_triggered() {
_realTimeDataForm->show();
}
void MainWindow::slotSaveExperimentalDataMsgBox() {
logde << "_manuallyStopTheExperimentFlag:" << _manuallyStopTheExperimentFlag;
if (_manuallyStopTheExperimentFlag) {
logde << "_manuallyStopTheExperimentFlag...";
return;
}
// auto save file.
logde << "slotSaveExperimentalDataMsgBox saveFile ...";
QString finalFileName;
if (saveFile(Global::_experimentInfo.sampleName,
Global::Mode::Experiment,
finalFileName,
true)) {
_leftWidget->reloadFileName();
QString str = QString("%1 文件保存成功。").arg(finalFileName);
QMessageBox::information(this, "文件保存", str, QMessageBox::Yes);
}
#if 0
QMessageBox::StandardButton reply;
reply = QMessageBox::question(this, "数据保存提示", "是否保存实验数据?",
QMessageBox::Yes | QMessageBox::No);
if (reply == QMessageBox::Yes) {
QString finaleFileName;
saveFile(Global::_experimentInfo.sampleName,Global::Mode::Experiment,finaleFileName);
_leftWidget->reloadFileName();
} else {
on_actionClearAllData_triggered();
}
#endif
}
void MainWindow::on_actionConnectToDev_triggered() {
logde << "connect to device...";
if (SerialPort::instance()->isOpen()) {
logde << "close device.";
SerialPort::instance()->closeSp();
ui->actionConnectToDev->setIcon(QIcon(":/images/connect.png"));
ui->actionConnectToDev->setText("连接设备");
logde << "close serial port.";
//
QString str("设备已断开。");
slotUpdateStatusbarMsg(str);
showMesgBox(str);
} else {
logde << "open device.";
if (SerialPort::instance()->openSp()) {
setActionEnable(true);
// Global::instance()->setMode(Global::Mode::ConnectedToDev);
Global::_mode = Global::Mode::ConnectedToDev;
QByteArray ba = DataParser::inquirePhaseInfo();
SerialPort::instance()->sendData(ba);
ui->actionConnectToDev->setIcon(QIcon(":/images/disconnect.png"));
ui->actionConnectToDev->setText("断开连接");
//
QString str("设备已连接。");
slotUpdateStatusbarMsg(str);
showMesgBox(str);
logde << "open serial port success. ";
} else {
// QMessageBox::warning(this, "warnning", "Serial Port open failed.");
showMesgBox("设备打开失败。");
}
}
}
void MainWindow::on_actionStartPoint_triggered() {
logde << "start experiment...";
_rightWidget->show();
_centralWidget->setAnalysisMode(CentralWidget::AnalysisMode::StartPoint);
}
void MainWindow::on_actionStopPoint_triggered() {
_rightWidget->show();
_centralWidget->setAnalysisMode(CentralWidget::AnalysisMode::StopPoint);
}
void MainWindow::on_actionNumericalLabel_triggered() {
_rightWidget->show();
_centralWidget->setAnalysisMode(CentralWidget::AnalysisMode::NumericalLabel);
}
void MainWindow::on_actionPeakSynthesisAnalysis_triggered() {
_rightWidget->show();
_centralWidget->setAnalysisMode(CentralWidget::AnalysisMode::PeakSynthesisAnalysis);
}
void MainWindow::on_actionClearAllData_triggered() {
// 实验过程中,不允许清除数据。
if (Global::_mode == Global::Mode::Experiment) {
return;
}
slotUpdateStatusbarMsg("");
_rightWidget->hide();
_centralWidget->clearAllData();
}
void MainWindow::on_actionGlassTransition_triggered() {
_rightWidget->show();
_centralWidget->setAnalysisMode(CentralWidget::AnalysisMode::GlassTransition);
}
void MainWindow::on_actionOIT_triggered() {
_rightWidget->show();
_centralWidget->setAnalysisMode(CentralWidget::AnalysisMode::OIT);
}
void MainWindow::on_actionSpecificHeatCompMethod_triggered() {
_specificHeatComparisonMethodForm->show();
}
void MainWindow::on_actionDegreeOfCrystallinity_triggered() {
// QMessageBox::warning(this, "warnning", "结晶度.");
_degreeOfCrystallinityForm->show();
}
void MainWindow::on_actionInstrumentParameter_triggered() {
_instrumentCoefficientForm->show();
}
void MainWindow::on_actionOITAutoAnalysisParam_triggered() {
_OITAutoAnalysisParamForm->show();
}
void MainWindow::on_actionOITAutoAnalysisMode_triggered() {
}
void MainWindow::on_actionTimeAxisAnalysisPCTMode_triggered() {
Global::_displayTimeValue = ui->actionTimeAxisAnalysisPCTMode->isChecked();
}
void MainWindow::on_actionDegreeOfCuring_triggered() {
//
_degreeOfCureForm->show();
}
void MainWindow::on_actionAbout_triggered() {
_aboutForm->show();
}
void MainWindow::on_actionEnthalpyCorrectionEdit_triggered() {
_enthalpyDataCorrectionForm->show();
}
void MainWindow::on_actionEnthalpyCorrectionSelection_triggered() {
_coefficientSelectionForm->show();
}
void MainWindow::on_actionPrintPreview_triggered() {
// _printPreviewForm->show();
_printPreviewForm->setPixmap(_centralWidget->getPixMap());
_printPreviewForm->_customPrintPreviewDialog->showMaximized();
}
void MainWindow::on_actionOnsetTemperaturePoint_triggered() {
_rightWidget->show();
_centralWidget->setAnalysisMode(CentralWidget::AnalysisMode::OnsetTemperaturePoint);
}
void MainWindow::on_actionEndsetTemperaturePoint_triggered() {
_rightWidget->show();
_centralWidget->setAnalysisMode(CentralWidget::AnalysisMode::EndsetTemperaturePoint);
}
void MainWindow::on_actionYAxis_triggered() {
_centralWidget->switchAxisMode();
}
void MainWindow::on_actionAxisSetting_triggered() {
_axisSettingForm->show();
}
void MainWindow::on_actionSaveData_triggered() {
QString finaleFileName;
saveFile(Global::_experimentInfo.sampleName, Global::_mode, finaleFileName);
_leftWidget->reloadFileName();
}
void MainWindow::on_actionSaveas_triggered() {
QString finaleFileName;
saveFile(Global::_experimentInfo.sampleName, Global::Mode::None, finaleFileName);
_leftWidget->reloadFileName();
}
void MainWindow::on_actionLanguage_triggered() {
if (Global::_languageType == Global::LanguageType::Chinese) {
Global::_languageType = Global::LanguageType::English;
ui->actionLanguage->setText(Global::EnglishStr);
} else {
Global::_languageType = Global::LanguageType::Chinese;
ui->actionLanguage->setText(Global::ChineseStr);
}
}
void MainWindow::on_actionSmoothness1_triggered() {
smoothness(1);
}
void MainWindow::on_actionSmoothness2_triggered() {
smoothness(2);
}
void MainWindow::on_actionSmoothness3_triggered() {
smoothness(3);
}
void MainWindow::on_actionSmoothness4_triggered() {
smoothness(4);
}
void MainWindow::on_actionSmoothness5_triggered() {
smoothness(5);
}
void MainWindow::on_actionSmoothness6_triggered() {
smoothness(6);
}
void MainWindow::on_actionSmoothness7_triggered() {
smoothness(7);
}
void MainWindow::on_actionSmoothness8_triggered() {
smoothness(8);
}
void MainWindow::on_actionSmoothness9_triggered() {
smoothness(9);
}
void MainWindow::on_actionSmoothness10_triggered() {
smoothness(10);
}
void MainWindow::on_actionOriginalData_triggered() {
if (!Global::_curveExperimentDataVtr.empty()) {
// 删除所有objectName为experiment的curve.
_centralWidget->deleteCurveByObjectName(Global::ObjectNameExperiemnt);
for (auto &item : Global::_curveExperimentDataVtr) {
item.smoothDataVtr.clear();
item.curve = _centralWidget->addCurveData(item.dataVtr, Global::ObjectNameExperiemnt);
}
} else {
// 当前数据为文件分析数据时,需要把当前文件下的所有数据都进行平滑处理。
QString selectedCurveObjectName = _centralWidget->getCurrentCurve()->objectName();
_centralWidget->deleteCurveByObjectName(selectedCurveObjectName);
for (Global::CurveFileData &cfd : Global::_curveFileDataVtr) {
if (selectedCurveObjectName.contains(cfd.filePath)) {
for (Global::PhaseTotalInfo &pti : cfd.phaseTotalVtr) {
pti.smoothDataVtr.clear();
pti.curve = _centralWidget->addCurveData(pti.dataVtr,
cfd.filePath);
}
}
}
}
#if 0
// process data.
QVector<Global::ExperimentData> targetDataVtr;
QString objectName;
QCPCurve ** curvePtrPtr;
if(!Global::_curveExperimentDataVtr.empty()){
for(auto & item:Global::_curveExperimentDataVtr){
if(_centralWidget->isCurrentCurve(item.curve)){
targetDataVtr = item.dataVtr;
objectName = Global::ObjectNameExperiemnt;
curvePtrPtr = &item.curve;
}
}
}else{
for(Global::CurveFileData &cfd :Global::_curveFileDataVtr){
for(Global::PhaseTotalInfo& pti:cfd.phaseTotalVtr){
if(_centralWidget->isCurrentCurve(pti.curve)){
targetDataVtr = pti.dataVtr;
objectName = cfd.filePath;
curvePtrPtr = &pti.curve;
}
}
}
}
//
_centralWidget->deleteCurveByObjectName(_centralWidget->getCurrentCurve()->objectName());
_centralWidget->addCurveData(targetDataVtr,objectName);
*curvePtrPtr = _centralWidget->getCurrentCurve();
#endif
}
void MainWindow::showMesgBox(const QString str) {
static bool isShow = false;
if (!isShow) {
isShow = true;
QMessageBox::information(this, "提示", str);
isShow = false;
}
}
void MainWindow::slotDeviceDisconnected() {
// logde<<"slotDeviceDisconnected...1";
// 如果当前是实验模式时,需要先停止实验。
if (SerialPort::instance()->isOpen()) {
// logde<<"slotDeviceDisconnected...2";
// ui更新断开连接
ui->actionConnectToDev->setIcon(QIcon(":/images/connect.png"));
ui->actionConnectToDev->setText("连接设备");
// 停止实验
on_actionStop_triggered();
SerialPort::instance()->closeSp();
}
}