2025-05-15T17:31:02

This commit is contained in:
yuntang 2025-05-15 17:31:03 +08:00
parent dc255f7fc1
commit fe19f5ff17
19 changed files with 806 additions and 62 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -8,7 +8,7 @@ CONFIG+=precompile_header
PRECOMPILED_HEADER=stable.h
#
VERSION = 0.9.7.3
VERSION = 0.9.7.4
# 设置目标文件名,包含版本号
TARGET = AnalysisTool_$${VERSION}
@ -39,6 +39,7 @@ SOURCES += \
ui/enthalpydatacorrectionform.cpp \
ui/itemmanager.cpp \
ui/localcustomplot.cpp \
ui/printereditform.cpp \
ui/printpreviewform.cpp \
ui/rightwidget.cpp \
thirdparty/easylogging/easylogging++.cc \
@ -75,6 +76,7 @@ HEADERS += \
ui/enthalpydatacorrectionform.h \
ui/itemmanager.h \
ui/localcustomplot.h \
ui/printereditform.h \
ui/printpreviewform.h \
ui/rightwidget.h \
thirdparty/easylogging/easylogging++.h \
@ -107,6 +109,7 @@ FORMS += \
ui/experimentsettingform.ui \
ui/instrumentcoefficientform.ui \
ui/oitautoanalysisparamform.ui \
ui/printereditform.ui \
ui/printpreviewform.ui \
ui/realtimedataform.ui \
ui/specificheatcomparisonmethodform.ui

View File

@ -116,6 +116,11 @@ void XlsxHandler::readPhaseData(QXlsx::Worksheet *workSheet, int &startLineIndex
void XlsxHandler::writeFile(const QString filePath)
{
if(Global::_curveExperimentDataVtr.empty()){
logde<<"_curveExperimentDataVtr empty...";
return;
}
Global::ExperimentInfo& ei = Global::_experimentInfo;
QXlsx::Document xlsx;
@ -230,6 +235,8 @@ void XlsxHandler::writeFile(const QString filePath)
row++;
// phase data.
logde<<"Global::_curveExperimentDataVtr size:"
<<Global::_curveExperimentDataVtr.size();
const QVector<Global::ExperimentData>& edVtr =
Global::_curveExperimentDataVtr.at(i).dataVtr;
@ -257,6 +264,9 @@ void XlsxHandler::writeFile(const QString filePath)
xlsx.write(phaseSizeRow , 1, ConPhaseSize);
xlsx.write(phaseSizeRow , 2, phaseCount);
// Clear data.
Global::clearExperimentData();
//
logde<<"before xlsx save as...";
if (!xlsx.saveAs(filePath)) {
@ -348,31 +358,6 @@ void XlsxHandler::writeAnalysisOperation(const QString filePath)
}
#endif
#if 0
if (!xlsx->saveAs(filePath)) {
qDebug() << "Failed to save xlsx file:" << filePath;
// 检查和创建目录
QDir dir(filePath);
if (!dir.exists()) {
qDebug() << "Directory does not exist. Creating directory...";
dir.mkpath(".");
}
// 检查权限
QFile file(filePath);
if (!file.open(QIODevice::WriteOnly)) {
qDebug() << "Permission denied:" << file.errorString();
}
// 检查磁盘空间
QStorageInfo storageInfo(QDir::rootPath());
if (storageInfo.bytesFree() < 1024 * 1024 * 10) { // 假设文件大小至少为10MB
qDebug() << "Disk space is insufficient.";
}
// 尝试重新保存
if (!xlsx->saveAs(filePath)) {
qDebug() << "Save xlsx failed after retrying.";
}
}
#endif
//
delete xlsx;
logde<<"Save xlsx succ.";

View File

@ -123,6 +123,12 @@ double findNegativeStartPoint(double m, double b, double start, double end) {
return std::numeric_limits<double>::infinity();
}
void clearExperimentData()
{
_curveExperimentDataVtr.clear();
_currentCurveExperimentDataPtr = nullptr;
}
}

View File

@ -121,6 +121,8 @@ extern ExperimentInfo _experimentInfo;
extern QVector<CurveExperimentData> _curveExperimentDataVtr;
extern CurveExperimentData* _currentCurveExperimentDataPtr;
void clearExperimentData();
// Instrument coefficient.
extern bool _enthalpyCoefficientEnableFlag;
///abc

View File

@ -59,8 +59,6 @@ int main(int argc, char *argv[])
w.show();
#endif
qDebug() << "Application version:" << qApp->applicationVersion();
// EnthalpyDataCorrectionForm edf;
// edf.show();

View File

@ -29,6 +29,7 @@ MainWindow::MainWindow(QWidget *parent)
,_coefficientSelectionForm(new CoefficientSelectionForm(this))
,_printPreviewForm(new PrintPreviewForm(this))
,_axisSettingForm(new AxisSettingForm(this))
,_manuallyStopTheExperimentFlag(false)
{
ui->setupUi(this);
this->setToolTip(".....");
@ -106,7 +107,7 @@ void MainWindow::connections()
connect(_expertmentSettingForm, &ExperimentSettingForm::sigDeliverData,
SerialPort::instance(), &SerialPort::slotDeliverData);
#if 1
// dynamic data
// SerialPort.
connect(SerialPort::instance(), &SerialPort::sigSendCommonData,
_centralWidget, &CentralWidget::slotRecvCommonData);
connect(SerialPort::instance(), &SerialPort::sigSendCommonData,
@ -124,6 +125,8 @@ void MainWindow::connections()
connect(SerialPort::instance(), &SerialPort::sigUpdateStatusbarMsg,
this,&MainWindow::slotUpdateStatusbarMsg);
connect(SerialPort::instance(), &SerialPort::sigSaveExperimentalDataMsgBox,
this,&MainWindow::slotSaveExperimentalDataMsgBox);
#endif
// mode
@ -235,7 +238,7 @@ bool MainWindow::saveAnalysisFile(const QString fileName)
return true;
}
#endif
bool MainWindow::saveFile(const QString fileName)
bool MainWindow::saveFile(const QString fileName,const Global::Mode mode)
{
QString localFileName = fileName;
if(fileName.isEmpty()){
@ -243,9 +246,9 @@ bool MainWindow::saveFile(const QString fileName)
}
QString folder;
if(Global::_mode == Global::Mode::Analysis){
if(mode == Global::Mode::Analysis){
folder = Global::AnalysisStateFolder;
}else if(Global::_mode == Global::Mode::Experiment){
}else if(mode == Global::Mode::Experiment){
folder = Global::SampleDataFloder;
}
@ -259,9 +262,9 @@ bool MainWindow::saveFile(const QString fileName)
return false;
}
if(Global::_mode == Global::Mode::Analysis){
if(mode == Global::Mode::Analysis){
XlsxHandler::writeAnalysisOperation(filePath);
}else if(Global::_mode == Global::Mode::Experiment){
}else if(mode == Global::Mode::Experiment){
XlsxHandler::writeFile(filePath);
}
@ -280,13 +283,15 @@ void MainWindow::on_actionStop_triggered()
// if(saveExperimentFile(Global::_experimentInfo.sampleName)){
// _leftWidget->reloadFileName();
// }
if(saveFile(Global::_experimentInfo.sampleName)){
if(saveFile(Global::_experimentInfo.sampleName,Global::Mode::Experiment)){
_leftWidget->reloadFileName();
}
#endif
// Set software mode to analysis.
Global::_mode = Global::Mode::Analysis;
_manuallyStopTheExperimentFlag = true;
}
}
@ -297,6 +302,8 @@ void MainWindow::on_actionNew_triggered()
void MainWindow::on_actionStart_triggered()
{
on_actionClearAllData_triggered();
QByteArray ba = DataParser::setDeviceStartStop(DeviceStartMode::Start);
QString hexData = ba.toHex(' '); // ' ' 作为分隔符,可选参数
@ -307,6 +314,8 @@ void MainWindow::on_actionStart_triggered()
Global::_mode = Global::Mode::Experiment;
logde<<"start experiment,set soft into experiment mode.";
_manuallyStopTheExperimentFlag = false;
}
void MainWindow::on_actionReadOnly_triggered()
@ -320,6 +329,24 @@ void MainWindow::on_actionRealTimeWidget_triggered()
_realTimeDataForm->show();
}
void MainWindow::slotSaveExperimentalDataMsgBox()
{
if(_manuallyStopTheExperimentFlag){
return;
}
QMessageBox::StandardButton reply;
reply = QMessageBox::question(this, "数据保存提示", "是否保存实验数据?",
QMessageBox::Yes | QMessageBox::No);
if (reply == QMessageBox::Yes) {
saveFile(Global::_experimentInfo.sampleName,Global::Mode::Experiment);
} else {
on_actionClearAllData_triggered();
// Clear data.
Global::clearExperimentData();
}
}
void MainWindow::on_actionConnectToDev_triggered()
{
if (SerialPort::instance()->openSp())
@ -462,5 +489,5 @@ void MainWindow::on_actionAxisSetting_triggered()
void MainWindow::on_actionSaveData_triggered()
{
saveFile(Global::_experimentInfo.sampleName);
saveFile(Global::_experimentInfo.sampleName,Global::_mode);
}

View File

@ -49,6 +49,8 @@ private slots:
void on_actionReadOnly_triggered();
void on_actionRealTimeWidget_triggered();
void slotSaveExperimentalDataMsgBox();
//analysis
void on_actionNumericalLabel_triggered();
void on_actionStartPoint_triggered();
@ -101,8 +103,9 @@ private:
bool saveAnalysisFile(const QString fileName);
#endif
bool saveFile(const QString fileName);
bool saveFile(const QString fileName,const Global::Mode);
private:
bool _manuallyStopTheExperimentFlag;
Ui::MainWindow *ui;
CentralWidget *_centralWidget;
EventHandler *_eventHandler;

View File

@ -39,7 +39,7 @@ bool commonDataParser(const QByteArray &ba, CommonData &cd)
QByteArray connectToDevice(const QVector<Phase> &vtr)
QByteArray setExperimentInfo(const QVector<Phase> &vtr)
{
// const int phaseLength = sizeof(Phase);
const int phaseLength = PHASE_BYTE_SIZE;
@ -168,9 +168,11 @@ void experimentalStateSwitching(const CommonData &cd)
#endif
}
// logde<<"phase:"<<(int)cd.current_phase;
// logde<<"run type:"<<(int)cd.run_type;
// logde<<"software mode:"<<Global::_mode;
#if 0
logde<<"phase:"<<(int)cd.current_phase;
logde<<"run type:"<<(int)cd.run_type;
logde<<"software mode:"<<Global::_mode;
#endif
}
unsigned short modbusCRC16(unsigned char *data, unsigned short length)

View File

@ -9,7 +9,8 @@
#include "defines.h"
namespace DataParser {
QByteArray connectToDevice(const QVector<Phase>&);
QByteArray setExperimentInfo(const QVector<Phase>&);
QByteArray inquirePhaseInfo();
QByteArray setDeviceStartStop(const DeviceStartMode);

View File

@ -4,6 +4,7 @@
#include <qdatetime.h>
#include <iostream>
#include <cstring>
#include <qmessagebox.h>
#include <QSerialPortInfo>
#include "protocol.h"
@ -98,10 +99,12 @@ void SerialPort::slotReadData()
if(ba.size() == 0){
return;
}
#if 1
#if 0
QString hexData = ba.toHex(' '); // ' ' 作为分隔符,可选参数
qDebug() << "receive info (hex):" << hexData;
logde << "receive info (hex):" << hexData.toStdString();
#endif
SerialPortProtocol *spp = (SerialPortProtocol *)ba.data();
if (FRANE_HEAD != spp->head)
{
@ -128,8 +131,7 @@ void SerialPort::slotReadData()
else if (READ_CMD == spp->cmd)
{
DataParser::experimentalStateSwitching(cd);
setAxis();
updateStatusbarMsg(cd);
updateStatus(cd);
if (spp->addr == 0)
{
@ -137,19 +139,23 @@ void SerialPort::slotReadData()
{
emit sigSendCommonData(cd);
}
// emit sigSendCommonDataToRealDataForm(cd);
// emit sigSendCommonDataToRealDataForm(cd);
}
}
}
void SerialPort::updateStatusbarMsg(const CommonData &cd)
void SerialPort::updateStatus(const CommonData &cd)
{
#if 1
logde<<"phase:"<<(int)cd.current_phase;
logde<<"run type:"<<(int)cd.run_type;
// logde<<"phase:"<<(int)cd.current_phase;
// logde<<"run type:"<<(int)cd.run_type;
logde<<"software mode:"<<Global::_mode;
#endif
//
updateAxis();
// Update axis.
bool experimentEnded = false;
QString devRunModeStr;
switch(cd.run_type){
@ -178,6 +184,21 @@ void SerialPort::updateStatusbarMsg(const CommonData &cd)
}
emit sigUpdateStatusbarMsg(msg);
// If save experiment data.
static Global::Mode preMode = Global::Mode::Analysis;
bool sendSignalFlag = false;
if(Global::_mode != preMode){
if(preMode == Global::Mode::Experiment
&& Global::_mode == Global::Mode::Analysis){
sendSignalFlag = true;
}
preMode = Global::_mode;
}
if(sendSignalFlag){
emit sigSaveExperimentalDataMsgBox();
}
}
void SerialPort::commonDataParser(const int dataLength, const u16 addr,
@ -432,7 +453,7 @@ void SerialPort::displayPortInfo()
}
}
void SerialPort::setAxis()
void SerialPort::updateAxis()
{
static Global::Mode previousMode = Global::Analysis; // 记录上一次的模式
@ -494,18 +515,16 @@ void SerialPort::parserTest()
void SerialPort::slotDeliverData(const QByteArray &ba)
{
qDebug()<<"slotDeliverData...";
openSp();
slotSendData(ba);
}
void SerialPort::slotSendData(const QByteArray &ba)
{
#if 1
qDebug() << "slotSendData:" << ba.size();
logde << "slotSendData:" << ba.size();
QString hexData = ba.toHex(' '); // ' ' 作为分隔符,可选参数
qDebug() << "slotSendData:" << hexData;
logde << "slotSendData:" << hexData.toStdString();
#endif
if (_sp != nullptr && _sp->isOpen())

View File

@ -36,6 +36,7 @@ signals:
void sigSendPhaseInfo(const QByteArray &);
void sigAxisModify(const float temp);
void sigUpdateStatusbarMsg(const QString &);
void sigSaveExperimentalDataMsgBox();
public slots:
void slotDeliverData(const QByteArray &);
// void slotConnectToDevice(const QByteArray&);
@ -45,11 +46,11 @@ private slots:
void slotReadData();
private:
void updateStatusbarMsg(const CommonData &cd);
void updateStatus(const CommonData &cd);
void updateAxis();
void commonDataParser(const int dataLength, const u16 addr, const CommonData &cd);
void to_hex(char *in_char, int char_length, char *out_char);
void displayPortInfo();
void setAxis();
private:
SerialPort(QObject *parent = nullptr);
QSerialPort *_sp;

View File

@ -211,8 +211,6 @@ void CentralWidget::slotModeModify(const Global::Mode mode)
void CentralWidget::slotRecvCommonData(const CommonData &cd)
{
// logde<<"slotRecvCommonData...";
static double index = 0.0;
if(!_currentCurve){
@ -220,7 +218,7 @@ void CentralWidget::slotRecvCommonData(const CommonData &cd)
_currentCurve = new QCPCurve(_customPlot->xAxis, _customPlot->yAxis);
}
// logde<<"temp:"<<cd.sample_temp<<",dsc:"<<cd.dsc;
logde<<"temp:"<<cd.sample_temp<<",dsc:"<<cd.dsc;
_currentCurve->addData(index++,cd.sample_temp, cd.dsc);

View File

@ -425,8 +425,10 @@ void ExperimentSettingForm::on_pushButton_deliverData_clicked()
ei.initialAtmosPhere = (GasType)(ui->comboBox_phase_1_atmosphere->currentIndex());
#endif
//
QByteArray ba = DataParser::connectToDevice(phaseVtr);
QByteArray ba = DataParser::setExperimentInfo(phaseVtr);
qDebug() << "ba size:" << ba.size();
emit sigDeliverData(ba);
hide();
@ -493,7 +495,7 @@ void ExperimentSettingForm::slotPhaseCheck()
void ExperimentSettingForm::slotRecvPhaseInfo(const QByteArray &ba)
{
logde<<"-----------------------";
logde<<"----------------------- recv";
QString hexData = ba.toHex(' '); // ' ' 作为分隔符,可选参数
qDebug() << "slotRecvPhaseInfo hex:" << hexData;

View File

@ -0,0 +1,14 @@
#include "printereditform.h"
#include "ui_printereditform.h"
PrinterEditForm::PrinterEditForm(QWidget *parent) :
QWidget(parent),
ui(new Ui::PrinterEditForm)
{
ui->setupUi(this);
}
PrinterEditForm::~PrinterEditForm()
{
delete ui;
}

22
src/ui/printereditform.h Normal file
View File

@ -0,0 +1,22 @@
#ifndef PRINTEREDITFORM_H
#define PRINTEREDITFORM_H
#include <QWidget>
namespace Ui {
class PrinterEditForm;
}
class PrinterEditForm : public QWidget
{
Q_OBJECT
public:
explicit PrinterEditForm(QWidget *parent = nullptr);
~PrinterEditForm();
private:
Ui::PrinterEditForm *ui;
};
#endif // PRINTEREDITFORM_H

661
src/ui/printereditform.ui Normal file
View File

@ -0,0 +1,661 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>PrinterEditForm</class>
<widget class="QWidget" name="PrinterEditForm">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>790</width>
<height>366</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<widget class="QGroupBox" name="groupBox">
<property name="geometry">
<rect>
<x>10</x>
<y>10</y>
<width>281</width>
<height>181</height>
</rect>
</property>
<property name="title">
<string>GroupBox</string>
</property>
<widget class="QWidget" name="formLayoutWidget">
<property name="geometry">
<rect>
<x>20</x>
<y>30</y>
<width>241</width>
<height>121</height>
</rect>
</property>
<layout class="QFormLayout" name="formLayout">
<item row="0" column="0">
<widget class="QLabel" name="Label">
<property name="text">
<string>样品名称:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="sampleNameLineEdit"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="Label_2">
<property name="text">
<string>样品质量:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="sampleWeightLineEdit"/>
</item>
<item row="2" column="0">
<widget class="QLabel" name="Label_3">
<property name="text">
<string>实验日期:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="dateTimeLineEdit"/>
</item>
<item row="3" column="0">
<widget class="QLabel" name="Label_4">
<property name="text">
<string>操作员:</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLineEdit" name="userLineEdit"/>
</item>
</layout>
</widget>
</widget>
<widget class="QGroupBox" name="groupBox_2">
<property name="geometry">
<rect>
<x>300</x>
<y>10</y>
<width>481</width>
<height>301</height>
</rect>
</property>
<property name="title">
<string>GroupBox</string>
</property>
<widget class="QWidget" name="gridLayoutWidget">
<property name="geometry">
<rect>
<x>5</x>
<y>37</y>
<width>471</width>
<height>251</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout" rowstretch="1,0,0,0,0,0,0,0">
<property name="sizeConstraint">
<enum>QLayout::SetDefaultConstraint</enum>
</property>
<item row="7" column="4">
<widget class="QComboBox" name="comboBox_initial_atmosphere">
<item>
<property name="text">
<string>NC</string>
</property>
</item>
<item>
<property name="text">
<string>N2</string>
</property>
</item>
<item>
<property name="text">
<string>O2</string>
</property>
</item>
</widget>
</item>
<item row="2" column="2">
<widget class="QLineEdit" name="phase_2_scan_rate">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QCheckBox" name="checkBox_phase_2">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>2</string>
</property>
</widget>
</item>
<item row="4" column="3">
<widget class="QLineEdit" name="phase_4_constant_temp">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="2" column="4">
<widget class="QComboBox" name="comboBox_phase_2_atmosphere">
<item>
<property name="text">
<string>NC</string>
</property>
</item>
<item>
<property name="text">
<string>N2</string>
</property>
</item>
<item>
<property name="text">
<string>O2</string>
</property>
</item>
</widget>
</item>
<item row="4" column="0">
<widget class="QCheckBox" name="checkBox_phase_4">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>4</string>
</property>
</widget>
</item>
<item row="7" column="3">
<widget class="QLabel" name="label_7">
<property name="text">
<string>初始气氛:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="phase_1_cutoff_temp">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>100</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QLineEdit" name="phase_5_cutoff_temp">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>100</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="4" column="2">
<widget class="QLineEdit" name="phase_4_scan_rate">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QCheckBox" name="checkBox_phase_3">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>3</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLabel" name="label_3">
<property name="text">
<string>截止温度</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="1" column="4">
<widget class="QComboBox" name="comboBox_phase_1_atmosphere">
<item>
<property name="text">
<string>NC</string>
</property>
</item>
<item>
<property name="text">
<string>N2</string>
</property>
</item>
<item>
<property name="text">
<string>O2</string>
</property>
</item>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_2">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>阶段</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLineEdit" name="phase_3_cutoff_temp">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>100</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QLineEdit" name="phase_1_scan_rate">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="6" column="4">
<widget class="QComboBox" name="comboBox_phase_6_atmosphere">
<item>
<property name="text">
<string>NC</string>
</property>
</item>
<item>
<property name="text">
<string>N2</string>
</property>
</item>
<item>
<property name="text">
<string>O2</string>
</property>
</item>
</widget>
</item>
<item row="0" column="4">
<widget class="QLabel" name="label_4">
<property name="text">
<string>气氛</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="7" column="2">
<widget class="QRadioButton" name="radioButton_OIT_not">
<property name="text">
<string>非OIT</string>
</property>
</widget>
</item>
<item row="4" column="4">
<widget class="QComboBox" name="comboBox_phase_4_atmosphere">
<item>
<property name="text">
<string>NC</string>
</property>
</item>
<item>
<property name="text">
<string>N2</string>
</property>
</item>
<item>
<property name="text">
<string>O2</string>
</property>
</item>
</widget>
</item>
<item row="5" column="0">
<widget class="QCheckBox" name="checkBox_phase_5">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>5</string>
</property>
</widget>
</item>
<item row="7" column="1">
<widget class="QRadioButton" name="radioButton_OIT">
<property name="text">
<string>OIT</string>
</property>
</widget>
</item>
<item row="3" column="2">
<widget class="QLineEdit" name="phase_3_scan_rate">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="7" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>测试类型:</string>
</property>
</widget>
</item>
<item row="6" column="2">
<widget class="QLineEdit" name="phase_6_scan_rate">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>100</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QCheckBox" name="checkBox_phase_1">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>1</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QLineEdit" name="phase_4_cutoff_temp">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>100</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QLineEdit" name="phase_1_constant_temp">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="5" column="2">
<widget class="QLineEdit" name="phase_5_scan_rate">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>100</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="3" column="3">
<widget class="QLineEdit" name="phase_3_constant_temp">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="5" column="3">
<widget class="QLineEdit" name="phase_5_constant_temp">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>100</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="2" column="3">
<widget class="QLineEdit" name="phase_2_constant_temp">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="phase_2_cutoff_temp">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>100</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QLabel" name="label_5">
<property name="text">
<string>恒温时间</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="3" column="4">
<widget class="QComboBox" name="comboBox_phase_3_atmosphere">
<item>
<property name="text">
<string>NC</string>
</property>
</item>
<item>
<property name="text">
<string>N2</string>
</property>
</item>
<item>
<property name="text">
<string>O2</string>
</property>
</item>
</widget>
</item>
<item row="6" column="0">
<widget class="QCheckBox" name="checkBox_phase_6">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>6</string>
</property>
</widget>
</item>
<item row="6" column="3">
<widget class="QLineEdit" name="phase_6_constant_temp">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>100</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QLabel" name="label">
<property name="text">
<string>扫描速率</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="5" column="4">
<widget class="QComboBox" name="comboBox_phase_5_atmosphere">
<item>
<property name="text">
<string>NC</string>
</property>
</item>
<item>
<property name="text">
<string>N2</string>
</property>
</item>
<item>
<property name="text">
<string>O2</string>
</property>
</item>
</widget>
</item>
<item row="6" column="1">
<widget class="QLineEdit" name="phase_6_cutoff_temp">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>100</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
<widget class="QGroupBox" name="groupBox_3">
<property name="geometry">
<rect>
<x>10</x>
<y>190</y>
<width>281</width>
<height>121</height>
</rect>
</property>
<property name="title">
<string>GroupBox</string>
</property>
<widget class="QWidget" name="formLayoutWidget_2">
<property name="geometry">
<rect>
<x>70</x>
<y>30</y>
<width>141</width>
<height>61</height>
</rect>
</property>
<layout class="QFormLayout" name="formLayout_2">
<item row="0" column="0">
<widget class="QLabel" name="Label_5">
<property name="text">
<string>X:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="sampleNameLineEdit_2"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="Label_6">
<property name="text">
<string>Y:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="sampleWeightLineEdit_2"/>
</item>
</layout>
</widget>
</widget>
<widget class="QPushButton" name="pushButtonConfirm">
<property name="geometry">
<rect>
<x>380</x>
<y>330</y>
<width>80</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>确定</string>
</property>
</widget>
<widget class="QPushButton" name="pushButtonCancel">
<property name="geometry">
<rect>
<x>500</x>
<y>330</y>
<width>80</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>取消</string>
</property>
</widget>
</widget>
<resources/>
<connections/>
</ui>