#include "thermalwidget.h"
#include "xlsxdocument.h"
#include <QRandomGenerator>
#include <QGridLayout>
#include <QLabel>
#include <QCheckBox>
#include <QDebug>

extern double g_area;
extern double g_quality;

QuadraticFitResult g_result1, g_result2;

ThermalWidget::ThermalWidget(QWidget *parent) : QWidget(parent)
{
    // g_result1.a = 0.000141348;
    // g_result1.b = -0.0374065;
    // g_result1.c = 6.98113;

    g_result1.a = 0;
    g_result1.b = 0;
    g_result1.c = 1;

    QGridLayout* layout = new QGridLayout(this);
    QLabel* label1 = new QLabel(this);
    label1->setText("序号");
    QLabel* label2 = new QLabel(this);
    label2->setText("样品");
    QLabel* label3 = new QLabel(this);
    label3->setText("理论温度(C)");
    QLabel* label4 = new QLabel(this);
    label4->setText("理论热焓(J/g)");
    QLabel* label5 = new QLabel(this);
    label5->setText("实测热焓(J/g)");

    QLabel* slabel1 = new QLabel(this);
    slabel1->setText("C6H12");
    QLabel* slabel2 = new QLabel(this);
    slabel2->setText("Hg");
    QLabel* slabel3 = new QLabel(this);
    slabel3->setText("C6H5COOH");
    QLabel* slabel4 = new QLabel(this);
    slabel4->setText("In");
    QLabel* slabel5 = new QLabel(this);
    slabel5->setText("Sn");
    QLabel* slabel6 = new QLabel(this);
    slabel6->setText("Bi");
    QLabel* slabel7 = new QLabel(this);
    slabel7->setText("KC1O3");
    QLabel* slabel8 = new QLabel(this);
    slabel8->setText("Pb");
    QLabel* slabel9 = new QLabel(this);
    slabel9->setText("KNO3");
    QLabel* slabel10 = new QLabel(this);
    slabel10->setText("Zn");
    QLabel* slabel11 = new QLabel(this);
    slabel11->setText("Ag2SO4");
    QLabel* slabel12 = new QLabel(this);
    slabel12->setText("CsCl");
    QLabel* slabel13 = new QLabel(this);
    slabel13->setText("SiO2");
    QLabel* slabel14 = new QLabel(this);
    slabel14->setText("K2SO4");
    QLabel* slabel15 = new QLabel(this);
    slabel15->setText("K2CrO4");
    QLabel* slabel16 = new QLabel(this);
    slabel16->setText("BaCO3");
    QLabel* slabel17 = new QLabel(this);
    slabel17->setText("Ag");
    QLabel* slabel18 = new QLabel(this);
    slabel18->setText("Cu");

    tlabel1 = new QLabel(this);
    tlabel1->setText("-86.0");
    tlabel2 = new QLabel(this);
    tlabel2->setText("-38.8");
    tlabel3 = new QLabel(this);
    tlabel3->setText("122.1");
    tlabel4 = new QLabel(this);
    tlabel4->setText("156.6");
    tlabel5 = new QLabel(this);
    tlabel5->setText("231.9");
    tlabel6 = new QLabel(this);
    tlabel6->setText("271.4");
    tlabel7 = new QLabel(this);
    tlabel7->setText("299.5");
    tlabel8 = new QLabel(this);
    tlabel8->setText("327.4");
    tlabel9 = new QLabel(this);
    tlabel9->setText("334.0");
    tlabel10 = new QLabel(this);
    tlabel10->setText("419.5");
    tlabel11 = new QLabel(this);
    tlabel11->setText("430.0");
    tlabel12 = new QLabel(this);
    tlabel12->setText("476.0");
    tlabel13 = new QLabel(this);
    tlabel13->setText("573.0");
    tlabel14 = new QLabel(this);
    tlabel14->setText("583.0");
    tlabel15 = new QLabel(this);
    tlabel15->setText("665.0");
    tlabel16 = new QLabel(this);
    tlabel16->setText("810.0");
    tlabel17 = new QLabel(this);
    tlabel17->setText("961.8");
    tlabel18 = new QLabel(this);
    tlabel18->setText("1083.0");


    checkBox1 = new QCheckBox(this);
    checkBox1->setText("1");
    checkBox2 = new QCheckBox(this);
    checkBox2->setText("2");
    checkBox3 = new QCheckBox(this);
    checkBox3->setText("3");
    checkBox4 = new QCheckBox(this);
    checkBox4->setText("4");
    checkBox5 = new QCheckBox(this);
    checkBox5->setText("5");
    checkBox6 = new QCheckBox(this);
    checkBox6->setText("6");
    checkBox7 = new QCheckBox(this);
    checkBox7->setText("7");
    checkBox8 = new QCheckBox(this);
    checkBox8->setText("8");
    checkBox9 = new QCheckBox(this);
    checkBox9->setText("9");
    checkBox10 = new QCheckBox(this);
    checkBox10->setText("10");
    checkBox11 = new QCheckBox(this);
    checkBox11->setText("11");
    checkBox12 = new QCheckBox(this);
    checkBox12->setText("12");
    checkBox13 = new QCheckBox(this);
    checkBox13->setText("13");
    checkBox14 = new QCheckBox(this);
    checkBox14->setText("14");
    checkBox15 = new QCheckBox(this);
    checkBox15->setText("15");
    checkBox16 = new QCheckBox(this);
    checkBox16->setText("16");
    checkBox17 = new QCheckBox(this);
    checkBox17->setText("17");
    checkBox18 = new QCheckBox(this);
    checkBox18->setText("18");

    deal1Button = new QPushButton(this);
    deal1Button->setText("校正");
    deal2Button = new QPushButton(this);
    deal2Button->setText("再校正");
    saveButton = new QPushButton(this);
    saveButton->setText("保存");
    exitButton = new QPushButton(this);
    exitButton->setText("退出");

    m_ttlineEdit1 = new QLineEdit(this);
    m_ttlineEdit1->setAlignment( Qt::AlignHCenter);
    m_ttlineEdit1->setStyleSheet("border:1px solid black;");
    m_ttlineEdit2 = new QLineEdit(this);
    m_ttlineEdit2->setAlignment( Qt::AlignHCenter);
    m_ttlineEdit2->setStyleSheet("border:1px solid black;");
    m_ttlineEdit3 = new QLineEdit(this);
    m_ttlineEdit3->setAlignment( Qt::AlignHCenter);
    m_ttlineEdit3->setStyleSheet("border:1px solid black;");
    m_ttlineEdit4 = new QLineEdit(this);
    m_ttlineEdit4->setAlignment( Qt::AlignHCenter);
    m_ttlineEdit4->setStyleSheet("border:1px solid black;");
    m_ttlineEdit4->setText("28.6");
    m_ttlineEdit4->setAlignment( Qt::AlignHCenter);
    m_ttlineEdit5 = new QLineEdit(this);
    m_ttlineEdit5->setStyleSheet("border:1px solid black;");
    m_ttlineEdit5->setText("60.5");
    m_ttlineEdit5->setAlignment( Qt::AlignHCenter);
    m_ttlineEdit6 = new QLineEdit(this);
    m_ttlineEdit6->setAlignment( Qt::AlignHCenter);
    m_ttlineEdit6->setStyleSheet("border:1px solid black;");
    m_ttlineEdit6->setText("53.3");
    m_ttlineEdit7 = new QLineEdit(this);
    m_ttlineEdit7->setAlignment( Qt::AlignHCenter);
    m_ttlineEdit7->setStyleSheet("border:1px solid black;");
    m_ttlineEdit8 = new QLineEdit(this);
    m_ttlineEdit8->setAlignment( Qt::AlignHCenter);
    m_ttlineEdit8->setStyleSheet("border:1px solid black;");
    m_ttlineEdit8->setText("23.02");
    m_ttlineEdit9 = new QLineEdit(this);
    m_ttlineEdit9->setAlignment( Qt::AlignHCenter);
    m_ttlineEdit9->setStyleSheet("border:1px solid black;");
    m_ttlineEdit10 = new QLineEdit(this);
    m_ttlineEdit10->setAlignment( Qt::AlignHCenter);
    m_ttlineEdit10->setText("107.6");
    m_ttlineEdit10->setStyleSheet("border:1px solid black;");
    m_ttlineEdit11 = new QLineEdit(this);
    m_ttlineEdit11->setAlignment( Qt::AlignHCenter);
    m_ttlineEdit11->setStyleSheet("border:1px solid black;");
    m_ttlineEdit12 = new QLineEdit(this);
    m_ttlineEdit12->setAlignment( Qt::AlignHCenter);
    m_ttlineEdit12->setStyleSheet("border:1px solid black;");
    m_ttlineEdit13 = new QLineEdit(this);
    m_ttlineEdit13->setAlignment( Qt::AlignHCenter);
    m_ttlineEdit13->setStyleSheet("border:1px solid black;");
    m_ttlineEdit14 = new QLineEdit(this);
    m_ttlineEdit14->setAlignment( Qt::AlignHCenter);
    m_ttlineEdit14->setStyleSheet("border:1px solid black;");
    m_ttlineEdit15 = new QLineEdit(this);
    m_ttlineEdit15->setAlignment( Qt::AlignHCenter);
    m_ttlineEdit15->setStyleSheet("border:1px solid black;");
    m_ttlineEdit16 = new QLineEdit(this);
    m_ttlineEdit16->setAlignment( Qt::AlignHCenter);
    m_ttlineEdit16->setStyleSheet("border:1px solid black;");
    m_ttlineEdit17 = new QLineEdit(this);
    m_ttlineEdit17->setAlignment( Qt::AlignHCenter);
    m_ttlineEdit17->setStyleSheet("border:1px solid black;");
    m_ttlineEdit18 = new QLineEdit(this);
    m_ttlineEdit18->setAlignment( Qt::AlignHCenter);
    m_ttlineEdit18->setStyleSheet("border:1px solid black;");

    m_rtlineEdit1 = new QLineEdit(this);
    m_rtlineEdit1->setStyleSheet("border:1px solid black;");
    m_rtlineEdit2 = new QLineEdit(this);
    m_rtlineEdit2->setStyleSheet("border:1px solid black;");
    m_rtlineEdit3 = new QLineEdit(this);
    m_rtlineEdit3->setStyleSheet("border:1px solid black;");
    m_rtlineEdit4 = new QLineEdit(this);
    m_rtlineEdit4->setStyleSheet("border:1px solid black;");
    m_rtlineEdit5 = new QLineEdit(this);
    m_rtlineEdit5->setStyleSheet("border:1px solid black;");
    m_rtlineEdit6 = new QLineEdit(this);
    m_rtlineEdit6->setStyleSheet("border:1px solid black;");
    m_rtlineEdit7 = new QLineEdit(this);
    m_rtlineEdit7->setStyleSheet("border:1px solid black;");
    m_rtlineEdit8 = new QLineEdit(this);
    m_rtlineEdit8->setStyleSheet("border:1px solid black;");
    m_rtlineEdit9 = new QLineEdit(this);
    m_rtlineEdit9->setStyleSheet("border:1px solid black;");
    m_rtlineEdit10 = new QLineEdit(this);
    m_rtlineEdit10->setStyleSheet("border:1px solid black;");
    m_rtlineEdit11 = new QLineEdit(this);
    m_rtlineEdit11->setStyleSheet("border:1px solid black;");
    m_rtlineEdit12 = new QLineEdit(this);
    m_rtlineEdit12->setStyleSheet("border:1px solid black;");
    m_rtlineEdit13 = new QLineEdit(this);
    m_rtlineEdit13->setStyleSheet("border:1px solid black;");
    m_rtlineEdit14 = new QLineEdit(this);
    m_rtlineEdit14->setStyleSheet("border:1px solid black;");
    m_rtlineEdit15 = new QLineEdit(this);
    m_rtlineEdit15->setStyleSheet("border:1px solid black;");
    m_rtlineEdit16 = new QLineEdit(this);
    m_rtlineEdit16->setStyleSheet("border:1px solid black;");
    m_rtlineEdit17 = new QLineEdit(this);
    m_rtlineEdit17->setStyleSheet("border:1px solid black;");
    m_rtlineEdit18 = new QLineEdit(this);
    m_rtlineEdit18->setStyleSheet("border:1px solid black;");

    layout->addWidget(label1, 0, 0);
    layout->addWidget(label2, 0, 1);
    layout->addWidget(label3, 0, 2);
    layout->addWidget(label4, 0, 3);
    layout->addWidget(label5, 0, 4);
    layout->addWidget(checkBox1, 1, 0);
    layout->addWidget(checkBox2, 2, 0);
    layout->addWidget(checkBox3, 3, 0);
    layout->addWidget(checkBox4, 4, 0);
    layout->addWidget(checkBox5, 5, 0);
    layout->addWidget(checkBox6, 6, 0);
    layout->addWidget(checkBox7, 7, 0);
    layout->addWidget(checkBox8, 8, 0);
    layout->addWidget(checkBox9, 9, 0);
    layout->addWidget(checkBox10, 10, 0);
    layout->addWidget(checkBox11, 11, 0);
    layout->addWidget(checkBox12, 12, 0);
    layout->addWidget(checkBox13, 13, 0);
    layout->addWidget(checkBox14, 14, 0);
    layout->addWidget(checkBox15, 15, 0);
    layout->addWidget(checkBox16, 16, 0);
    layout->addWidget(checkBox17, 17, 0);
    layout->addWidget(checkBox18, 18, 0);
    layout->addWidget(slabel1, 1, 1);
    layout->addWidget(slabel2, 2, 1);
    layout->addWidget(slabel3, 3, 1);
    layout->addWidget(slabel4, 4, 1);
    layout->addWidget(slabel5, 5, 1);
    layout->addWidget(slabel6, 6, 1);
    layout->addWidget(slabel7, 7, 1);
    layout->addWidget(slabel8, 8, 1);
    layout->addWidget(slabel9, 9, 1);
    layout->addWidget(slabel10, 10, 1);
    layout->addWidget(slabel11, 11, 1);
    layout->addWidget(slabel12, 12, 1);
    layout->addWidget(slabel13, 13, 1);
    layout->addWidget(slabel14, 14, 1);
    layout->addWidget(slabel15, 15, 1);
    layout->addWidget(slabel16, 16, 1);
    layout->addWidget(slabel17, 17, 1);
    layout->addWidget(slabel18, 18, 1);
    layout->addWidget(tlabel1, 1, 2);
    layout->addWidget(tlabel2, 2, 2);
    layout->addWidget(tlabel3, 3, 2);
    layout->addWidget(tlabel4, 4, 2);
    layout->addWidget(tlabel5, 5, 2);
    layout->addWidget(tlabel6, 6, 2);
    layout->addWidget(tlabel7, 7, 2);
    layout->addWidget(tlabel8, 8, 2);
    layout->addWidget(tlabel9, 9, 2);
    layout->addWidget(tlabel10, 10, 2);
    layout->addWidget(tlabel11, 11, 2);
    layout->addWidget(tlabel12, 12, 2);
    layout->addWidget(tlabel13, 13, 2);
    layout->addWidget(tlabel14, 14, 2);
    layout->addWidget(tlabel15, 15, 2);
    layout->addWidget(tlabel16, 16, 2);
    layout->addWidget(tlabel17, 17, 2);
    layout->addWidget(tlabel18, 18, 2);

    layout->addWidget(m_ttlineEdit1, 1, 3);
    layout->addWidget(m_ttlineEdit2, 2, 3);
    layout->addWidget(m_ttlineEdit3, 3, 3);
    layout->addWidget(m_ttlineEdit4, 4, 3);
    layout->addWidget(m_ttlineEdit5, 5, 3);
    layout->addWidget(m_ttlineEdit6, 6, 3);
    layout->addWidget(m_ttlineEdit7, 7, 3);
    layout->addWidget(m_ttlineEdit8, 8, 3);
    layout->addWidget(m_ttlineEdit9, 9, 3);
    layout->addWidget(m_ttlineEdit10, 10, 3);
    layout->addWidget(m_ttlineEdit11, 11, 3);
    layout->addWidget(m_ttlineEdit12, 12, 3);
    layout->addWidget(m_ttlineEdit13, 13, 3);
    layout->addWidget(m_ttlineEdit14, 14, 3);
    layout->addWidget(m_ttlineEdit15, 15, 3);
    layout->addWidget(m_ttlineEdit16, 16, 3);
    layout->addWidget(m_ttlineEdit17, 17, 3);
    layout->addWidget(m_ttlineEdit18, 18, 3);

    layout->addWidget(m_rtlineEdit1, 1, 4);
    layout->addWidget(m_rtlineEdit2, 2, 4);
    layout->addWidget(m_rtlineEdit3, 3, 4);
    layout->addWidget(m_rtlineEdit4, 4, 4);
    layout->addWidget(m_rtlineEdit5, 5, 4);
    layout->addWidget(m_rtlineEdit6, 6, 4);
    layout->addWidget(m_rtlineEdit7, 7, 4);
    layout->addWidget(m_rtlineEdit8, 8, 4);
    layout->addWidget(m_rtlineEdit9, 9, 4);
    layout->addWidget(m_rtlineEdit10, 10, 4);
    layout->addWidget(m_rtlineEdit11, 11, 4);
    layout->addWidget(m_rtlineEdit12, 12, 4);
    layout->addWidget(m_rtlineEdit13, 13, 4);
    layout->addWidget(m_rtlineEdit14, 14, 4);
    layout->addWidget(m_rtlineEdit15, 15, 4);
    layout->addWidget(m_rtlineEdit16, 16, 4);
    layout->addWidget(m_rtlineEdit17, 17, 4);
    layout->addWidget(m_rtlineEdit18, 18, 4);

    layout->addWidget(deal1Button, 19, 3);
    layout->addWidget(deal2Button, 19, 4);
    ///layout->addWidget(saveButton, 19, 3);
    ///layout->addWidget(exitButton, 19, 4);

    layout->setSpacing(20);
    setLayout(layout);

    connect(deal1Button, SIGNAL(clicked()), this, SLOT(deal_checkbox_data()));
    connect(deal2Button, SIGNAL(clicked()), this, SLOT(redo_deal_checkbox_data()));
    connect(saveButton, SIGNAL(clicked()), this, SLOT(fit_test()));


}

ThermalWidget::~ThermalWidget()
{

}

void ThermalWidget::redo_deal_checkbox_data()
{
    QVector<QPointF> points;
    if(checkBox1->isChecked()==true)
    {
        QString temperstr, ttstr, rtstr;
        temperstr = tlabel1->text();
        ttstr = m_ttlineEdit1->text();
        rtstr = m_rtlineEdit1->text();
        QPointF tmpoint;
        tmpoint.setX(temperstr.toDouble());
        tmpoint.setY((ttstr.toDouble()/rtstr.toDouble())-1);
        points.append(tmpoint);
    }
    if(checkBox2->isChecked()==true)
    {
        QString temperstr, ttstr, rtstr;
        temperstr = tlabel2->text();
        ttstr = m_ttlineEdit2->text();
        rtstr = m_rtlineEdit2->text();
        QPointF tmpoint;
        tmpoint.setX(temperstr.toDouble());
        tmpoint.setY((ttstr.toDouble()/rtstr.toDouble())-1);
        ///tmpoint.setY((ttstr.toDouble()/thermal4)-1);
        points.append(tmpoint);
    }
    if(checkBox3->isChecked()==true)
    {
        QString temperstr, ttstr, rtstr;
        temperstr = tlabel3->text();
        ttstr = m_ttlineEdit3->text();
        rtstr = m_rtlineEdit3->text();
        QPointF tmpoint;
        tmpoint.setX(temperstr.toDouble());
        tmpoint.setY((ttstr.toDouble()/rtstr.toDouble())-1);
        ///tmpoint.setY((ttstr.toDouble()/thermal4)-1);
        points.append(tmpoint);
    }
    if(checkBox4->isChecked()==true)
    {
        QString temperstr, ttstr, rtstr;
        temperstr = tlabel4->text();
        ttstr = m_ttlineEdit4->text();
        rtstr = m_rtlineEdit4->text();
        QPointF tmpoint;
        tmpoint.setX(temperstr.toDouble());
        tmpoint.setY((ttstr.toDouble()/rtstr.toDouble())-1);
        ///tmpoint.setY((ttstr.toDouble()/thermal4)-1);
        points.append(tmpoint);
    }
    if(checkBox5->isChecked()==true)
    {
        QString temperstr, ttstr, rtstr;
        temperstr = tlabel5->text();
        ttstr = m_ttlineEdit5->text();
        rtstr = m_rtlineEdit5->text();
        QPointF tmpoint;
        tmpoint.setX(temperstr.toDouble());
        tmpoint.setY((ttstr.toDouble()/rtstr.toDouble())-1);
        ///tmpoint.setY((ttstr.toDouble()/thermal5)-1);
        points.append(tmpoint);
    }
    if(checkBox6->isChecked()==true)
    {
        QString temperstr, ttstr, rtstr;
        temperstr = tlabel6->text();
        ttstr = m_ttlineEdit6->text();
        rtstr = m_rtlineEdit6->text();
        QPointF tmpoint;
        tmpoint.setX(temperstr.toDouble());
        tmpoint.setY((ttstr.toDouble()/rtstr.toDouble())-1);
        points.append(tmpoint);
    }
    if(checkBox7->isChecked()==true)
    {
        QString temperstr, ttstr, rtstr;
        temperstr = tlabel7->text();
        ttstr = m_ttlineEdit7->text();
        rtstr = m_rtlineEdit7->text();
        QPointF tmpoint;
        tmpoint.setX(temperstr.toDouble());
        tmpoint.setY((ttstr.toDouble()/rtstr.toDouble())-1);
        points.append(tmpoint);
    }
    if(checkBox8->isChecked()==true)
    {
        QString temperstr, ttstr, rtstr;
        temperstr = tlabel8->text();
        ttstr = m_ttlineEdit8->text();
        rtstr = m_rtlineEdit8->text();
        QPointF tmpoint;
        tmpoint.setX(temperstr.toDouble());
        tmpoint.setY((ttstr.toDouble()/rtstr.toDouble())-1);
        ///tmpoint.setY(ttstr.toDouble()/thermal8);
        points.append(tmpoint);
    }
    if(checkBox9->isChecked()==true)
    {
        QString temperstr, ttstr, rtstr;
        temperstr = tlabel9->text();
        ttstr = m_ttlineEdit9->text();
        rtstr = m_rtlineEdit9->text();
        QPointF tmpoint;
        tmpoint.setX(temperstr.toDouble());
        tmpoint.setY((ttstr.toDouble()/rtstr.toDouble())-1);
        points.append(tmpoint);
    }
    if(checkBox10->isChecked()==true)
    {
        QString temperstr, ttstr, rtstr;
        temperstr = tlabel10->text();
        ttstr = m_ttlineEdit10->text();
        rtstr = m_rtlineEdit10->text();
        QPointF tmpoint;
        tmpoint.setX(temperstr.toDouble());
        tmpoint.setY((ttstr.toDouble()/rtstr.toDouble())-1);
        ///tmpoint.setY((ttstr.toDouble()/thermal10)-1);
        points.append(tmpoint);
    }
    if(checkBox11->isChecked()==true)
    {
        QString temperstr, ttstr, rtstr;
        temperstr = tlabel11->text();
        ttstr = m_ttlineEdit11->text();
        rtstr = m_rtlineEdit11->text();
        QPointF tmpoint;
        tmpoint.setX(temperstr.toDouble());
        tmpoint.setY((ttstr.toDouble()/rtstr.toDouble())-1);
        points.append(tmpoint);
    }
    if(checkBox12->isChecked()==true)
    {
        QString temperstr, ttstr, rtstr;
        temperstr = tlabel12->text();
        ttstr = m_ttlineEdit12->text();
        rtstr = m_rtlineEdit12->text();
        QPointF tmpoint;
        tmpoint.setX(temperstr.toDouble());
        tmpoint.setY((ttstr.toDouble()/rtstr.toDouble())-1);
        points.append(tmpoint);
    }
    if(checkBox13->isChecked()==true)
    {
        QString temperstr, ttstr, rtstr;
        temperstr = tlabel13->text();
        ttstr = m_ttlineEdit13->text();
        rtstr = m_rtlineEdit13->text();
        QPointF tmpoint;
        tmpoint.setX(temperstr.toDouble());
        tmpoint.setY((ttstr.toDouble()/rtstr.toDouble())-1);
        points.append(tmpoint);
    }
    if(checkBox14->isChecked()==true)
    {
        QString temperstr, ttstr, rtstr;
        temperstr = tlabel14->text();
        ttstr = m_ttlineEdit14->text();
        rtstr = m_rtlineEdit14->text();
        QPointF tmpoint;
        tmpoint.setX(temperstr.toDouble());
        tmpoint.setY((ttstr.toDouble()/rtstr.toDouble())-1);
        points.append(tmpoint);
    }
    if(checkBox15->isChecked()==true)
    {
        QString temperstr, ttstr, rtstr;
        temperstr = tlabel15->text();
        ttstr = m_ttlineEdit15->text();
        rtstr = m_rtlineEdit15->text();
        QPointF tmpoint;
        tmpoint.setX(temperstr.toDouble());
        tmpoint.setY((ttstr.toDouble()/rtstr.toDouble())-1);
        points.append(tmpoint);
    }
    if(checkBox16->isChecked()==true)
    {
        QString temperstr, ttstr, rtstr;
        temperstr = tlabel16->text();
        ttstr = m_ttlineEdit16->text();
        rtstr = m_rtlineEdit16->text();
        QPointF tmpoint;
        tmpoint.setX(temperstr.toDouble());
        tmpoint.setY((ttstr.toDouble()/rtstr.toDouble())-1);
        points.append(tmpoint);
    }
    if(checkBox17->isChecked()==true)
    {
        QString temperstr, ttstr, rtstr;
        temperstr = tlabel17->text();
        ttstr = m_ttlineEdit17->text();
        rtstr = m_rtlineEdit17->text();
        QPointF tmpoint;
        tmpoint.setX(temperstr.toDouble());
        tmpoint.setY((ttstr.toDouble()/rtstr.toDouble())-1);
        points.append(tmpoint);
    }
    if(checkBox18->isChecked()==true)
    {
        QString temperstr, ttstr, rtstr;
        temperstr = tlabel18->text();
        ttstr = m_ttlineEdit18->text();
        rtstr = m_rtlineEdit18->text();
        QPointF tmpoint;
        tmpoint.setX(temperstr.toDouble());
        tmpoint.setY((ttstr.toDouble()/rtstr.toDouble())-1);
        points.append(tmpoint);
    }
    result2 = quadraticFit(points);

    qDebug() << "拟合方程1: y = "
             << result1.a << "x² + "
             << result1.b << "x + "
             << result1.c;
    qDebug() << "拟合方程2: y = "
             << result2.a << "x² + "
             << result2.b << "x + "
             << result2.c;
    qDebug() << "拟合方程总: y = "
             << (result1.a+result2.a) << "x² + "
             << (result1.b+result2.b) << "x + "
             << (result1.c+result2.c);

    g_result1.a = result1.a+result2.a;
    g_result1.b = result1.b+result2.b;
    g_result1.c = result1.c+result2.c;

    /*if(checkBox4->isChecked()==true)
    {
        double temper=start4string.toDouble();
        double thermal = ((result1.a+result2.a)*temper*temper+(result1.b+result2.b)*temper+(result1.c+result2.c))*area4string.toDouble()/qua4string.toDouble();
        ///m_rtlineEdit4->setText(QString("%1").arg(thermal));
    }

    if(checkBox5->isChecked()==true)
    {
        double temper=start5string.toDouble();
        double thermal = ((result1.a+result2.a)*temper*temper+(result1.b+result2.b)*temper+(result1.c+result2.c))*area5string.toDouble()/qua5string.toDouble();
        ///m_rtlineEdit5->setText(QString("%1").arg(thermal));
    }

    if(checkBox8->isChecked()==true)
    {
        double temper=start8string.toDouble();
        double thermal = ((result1.a+result2.a)*temper*temper+(result1.b+result2.b)*temper+(result1.c+result2.c))*area8string.toDouble()/qua8string.toDouble();
        ///m_rtlineEdit8->setText(QString("%1").arg(thermal));
    }

    if(checkBox10->isChecked()==true)
    {
        double temper=start10string.toDouble();
        double thermal = ((result1.a+result2.a)*temper*temper+(result1.b+result2.b)*temper+(result1.c+result2.c))*area10string.toDouble()/qua10string.toDouble();
        ///m_rtlineEdit10->setText(QString("%1").arg(thermal));
    }*/

}

void ThermalWidget::deal_checkbox_data()
{
    QVector<QPointF> points;

    if(checkBox1->isChecked()==true)
    {
        QString temperstr, ttstr, rtstr;
        temperstr = tlabel1->text();
        ttstr = m_ttlineEdit1->text();
        rtstr = m_rtlineEdit1->text();
        QPointF tmpoint;
        tmpoint.setX(temperstr.toDouble());
        tmpoint.setY(ttstr.toDouble()/rtstr.toDouble());
        points.append(tmpoint);
        qDebug()<< ttstr.toDouble()<< rtstr.toDouble()<< Qt::endl;
    }


    if(checkBox2->isChecked()==true)
    {
        QString temperstr, ttstr, rtstr;
        temperstr = tlabel2->text();
        ttstr = m_ttlineEdit2->text();
        rtstr = m_rtlineEdit2->text();
        QPointF tmpoint;
        tmpoint.setX(temperstr.toDouble());
        tmpoint.setY(ttstr.toDouble()/rtstr.toDouble());
        points.append(tmpoint);
        qDebug()<< ttstr.toDouble()<< rtstr.toDouble()<< Qt::endl;
    }

    if(checkBox3->isChecked()==true)
    {
        QString temperstr, ttstr, rtstr;
        temperstr = tlabel3->text();
        ttstr = m_ttlineEdit3->text();
        rtstr = m_rtlineEdit3->text();
        QPointF tmpoint;
        tmpoint.setX(temperstr.toDouble());
        tmpoint.setY(ttstr.toDouble()/rtstr.toDouble());
        points.append(tmpoint);
        qDebug()<< ttstr.toDouble()<< rtstr.toDouble()<< Qt::endl;
    }

    if(checkBox4->isChecked()==true)
    {
        /*QXlsx::Document xlsx("sample.ana");
        xlsx.selectSheet("In");
        QXlsx::Worksheet *workSheet = xlsx.currentWorksheet();
        qua4string = workSheet->cellAt(1, 2)->value().toString();
        area4string = workSheet->cellAt(1, 3)->value().toString();
        start4string = workSheet->cellAt(1, 4)->value().toString();
        xlsx.deleteLater();*/

        QString temperstr, ttstr, rtstr;
        temperstr = tlabel4->text();
        ttstr = m_ttlineEdit4->text();
        rtstr = m_rtlineEdit4->text();
        QPointF tmpoint;
        tmpoint.setX(temperstr.toDouble());
        ///tmpoint.setY(ttstr.toDouble()/area4string.toDouble()*qua4string.toDouble());
        tmpoint.setY(ttstr.toDouble()/rtstr.toDouble());
        points.append(tmpoint);
        qDebug()<< ttstr.toDouble()<< rtstr.toDouble()<< Qt::endl;
    }
    if(checkBox5->isChecked()==true)
    {
        /*QXlsx::Document xlsx("sample.ana");
        xlsx.selectSheet("Sn");
        QXlsx::Worksheet *workSheet = xlsx.currentWorksheet();
        qua5string = workSheet->cellAt(1, 2)->value().toString();
        area5string = workSheet->cellAt(1, 3)->value().toString();
        start5string = workSheet->cellAt(1, 4)->value().toString();
        xlsx.deleteLater();*/

        QString temperstr, ttstr, rtstr;
        temperstr = tlabel5->text();
        ttstr = m_ttlineEdit5->text();
        rtstr = m_rtlineEdit5->text();
        QPointF tmpoint;
        tmpoint.setX(temperstr.toDouble());
        ///tmpoint.setY(ttstr.toDouble()/area5string.toDouble()*qua5string.toDouble());
        tmpoint.setY(ttstr.toDouble()/rtstr.toDouble());
        points.append(tmpoint);
        qDebug()<< ttstr.toDouble()<< rtstr.toDouble()<< Qt::endl;
    }
    QString start6string, qua6string, area6string;
    if(checkBox6->isChecked()==true)
    {
        /*QXlsx::Document xlsx("sample.ana");
        xlsx.selectSheet("Bi");
        QXlsx::Worksheet *workSheet = xlsx.currentWorksheet();
        qua6string = workSheet->cellAt(1, 2)->value().toString();
        area6string = workSheet->cellAt(1, 3)->value().toString();
        start6string = workSheet->cellAt(1, 4)->value().toString();
        xlsx.deleteLater();*/

        QString temperstr, ttstr, rtstr;
        temperstr = tlabel6->text();
        ttstr = m_ttlineEdit6->text();
        rtstr = m_rtlineEdit6->text();
        QPointF tmpoint;
        tmpoint.setX(temperstr.toDouble());
        ///tmpoint.setY(ttstr.toDouble()/area6string.toDouble()*qua6string.toDouble());
        tmpoint.setY(ttstr.toDouble()/rtstr.toDouble());
        points.append(tmpoint);
        qDebug()<< ttstr.toDouble()<< rtstr.toDouble()<< Qt::endl;
    }
    if(checkBox7->isChecked()==true)
    {
        QString temperstr, ttstr, rtstr;
        temperstr = tlabel7->text();
        ttstr = m_ttlineEdit7->text();
        rtstr = m_rtlineEdit7->text();
        QPointF tmpoint;
        tmpoint.setX(temperstr.toDouble());
        tmpoint.setY(ttstr.toDouble()/rtstr.toDouble());
        points.append(tmpoint);
        qDebug()<< ttstr.toDouble()<< rtstr.toDouble()<< Qt::endl;
    }
    if(checkBox8->isChecked()==true)
    {
        /*QXlsx::Document xlsx("sample.ana");
        xlsx.selectSheet("Pb");
        QXlsx::Worksheet *workSheet = xlsx.currentWorksheet();
        qua8string = workSheet->cellAt(1, 2)->value().toString();
        area8string = workSheet->cellAt(1, 3)->value().toString();
        start8string = workSheet->cellAt(1, 4)->value().toString();
        xlsx.deleteLater();*/

        QString temperstr, ttstr, rtstr;
        temperstr = tlabel8->text();
        ttstr = m_ttlineEdit8->text();
        rtstr = m_rtlineEdit8->text();
        QPointF tmpoint;
        tmpoint.setX(temperstr.toDouble());
        ///tmpoint.setY(ttstr.toDouble()/area8string.toDouble()*qua8string.toDouble());
        tmpoint.setY(ttstr.toDouble()/rtstr.toDouble());
        points.append(tmpoint);
        qDebug()<< ttstr.toDouble()<< rtstr.toDouble()<< Qt::endl;
    }
    if(checkBox9->isChecked()==true)
    {
        QString temperstr, ttstr, rtstr;
        temperstr = tlabel9->text();
        ttstr = m_ttlineEdit9->text();
        rtstr = m_rtlineEdit9->text();
        QPointF tmpoint;
        tmpoint.setX(temperstr.toDouble());
        tmpoint.setY(ttstr.toDouble()/rtstr.toDouble());
        points.append(tmpoint);
        qDebug()<< ttstr.toDouble()<< rtstr.toDouble()<< Qt::endl;
    }
    if(checkBox10->isChecked()==true)
    {
        /*QXlsx::Document xlsx("sample.ana");
        xlsx.selectSheet("Zn");
        QXlsx::Worksheet *workSheet = xlsx.currentWorksheet();
        qua10string = workSheet->cellAt(1, 2)->value().toString();
        area10string = workSheet->cellAt(1, 3)->value().toString();
        start10string = workSheet->cellAt(1, 4)->value().toString();
        xlsx.deleteLater();*/

        QString temperstr, ttstr, rtstr;
        temperstr = tlabel10->text();
        ttstr = m_ttlineEdit10->text();
        rtstr = m_rtlineEdit10->text();
        QPointF tmpoint;
        tmpoint.setX(temperstr.toDouble());
        ///tmpoint.setY(ttstr.toDouble()/area10string.toDouble()*qua10string.toDouble());
        tmpoint.setY(ttstr.toDouble()/rtstr.toDouble());
        points.append(tmpoint);
        qDebug()<< ttstr.toDouble()<< rtstr.toDouble()<< Qt::endl;
    }

    if(checkBox11->isChecked()==true)
    {
        QString temperstr, ttstr, rtstr;
        temperstr = tlabel11->text();
        ttstr = m_ttlineEdit11->text();
        rtstr = m_rtlineEdit11->text();
        QPointF tmpoint;
        tmpoint.setX(temperstr.toDouble());
        tmpoint.setY(ttstr.toDouble()/rtstr.toDouble());
        points.append(tmpoint);
        qDebug()<< ttstr.toDouble()<< rtstr.toDouble()<< Qt::endl;
    }
    if(checkBox12->isChecked()==true)
    {
        QString temperstr, ttstr, rtstr;
        temperstr = tlabel12->text();
        ttstr = m_ttlineEdit12->text();
        rtstr = m_rtlineEdit12->text();
        QPointF tmpoint;
        tmpoint.setX(temperstr.toDouble());
        tmpoint.setY(ttstr.toDouble()/rtstr.toDouble());
        points.append(tmpoint);
        qDebug()<< ttstr.toDouble()<< rtstr.toDouble()<< Qt::endl;
    }
    if(checkBox13->isChecked()==true)
    {
        QString temperstr, ttstr, rtstr;
        temperstr = tlabel13->text();
        ttstr = m_ttlineEdit13->text();
        rtstr = m_rtlineEdit13->text();
        QPointF tmpoint;
        tmpoint.setX(temperstr.toDouble());
        tmpoint.setY(ttstr.toDouble()/rtstr.toDouble());
        points.append(tmpoint);
        qDebug()<< ttstr.toDouble()<< rtstr.toDouble()<< Qt::endl;
    }
    if(checkBox14->isChecked()==true)
    {
        QString temperstr, ttstr, rtstr;
        temperstr = tlabel14->text();
        ttstr = m_ttlineEdit14->text();
        rtstr = m_rtlineEdit14->text();
        QPointF tmpoint;
        tmpoint.setX(temperstr.toDouble());
        tmpoint.setY(ttstr.toDouble()/rtstr.toDouble());
        points.append(tmpoint);
        qDebug()<< ttstr.toDouble()<< rtstr.toDouble()<< Qt::endl;
    }
    if(checkBox15->isChecked()==true)
    {
        QString temperstr, ttstr, rtstr;
        temperstr = tlabel15->text();
        ttstr = m_ttlineEdit15->text();
        rtstr = m_rtlineEdit15->text();
        QPointF tmpoint;
        tmpoint.setX(temperstr.toDouble());
        tmpoint.setY(ttstr.toDouble()/rtstr.toDouble());
        points.append(tmpoint);
        qDebug()<< ttstr.toDouble()<< rtstr.toDouble()<< Qt::endl;
    }
    if(checkBox16->isChecked()==true)
    {
        QString temperstr, ttstr, rtstr;
        temperstr = tlabel16->text();
        ttstr = m_ttlineEdit16->text();
        rtstr = m_rtlineEdit16->text();
        QPointF tmpoint;
        tmpoint.setX(temperstr.toDouble());
        tmpoint.setY(ttstr.toDouble()/rtstr.toDouble());
        points.append(tmpoint);
        qDebug()<< ttstr.toDouble()<< rtstr.toDouble()<< Qt::endl;
    }
    if(checkBox17->isChecked()==true)
    {
        QString temperstr, ttstr, rtstr;
        temperstr = tlabel17->text();
        ttstr = m_ttlineEdit17->text();
        rtstr = m_rtlineEdit17->text();
        QPointF tmpoint;
        tmpoint.setX(temperstr.toDouble());
        tmpoint.setY(ttstr.toDouble()/rtstr.toDouble());
        points.append(tmpoint);
        qDebug()<< ttstr.toDouble()<< rtstr.toDouble()<< Qt::endl;
    }
    if(checkBox18->isChecked()==true)
    {
        QString temperstr, ttstr, rtstr;
        temperstr = tlabel18->text();
        ttstr = m_ttlineEdit18->text();
        rtstr = m_rtlineEdit18->text();
        QPointF tmpoint;
        tmpoint.setX(temperstr.toDouble());
        tmpoint.setY(ttstr.toDouble()/rtstr.toDouble());
        points.append(tmpoint);
        qDebug()<< ttstr.toDouble()<< rtstr.toDouble()<< Qt::endl;
    }



    result1 = quadraticFit(points);
    qDebug() << "拟合方程: y = "
             << result1.a << "x² + "
             << result1.b << "x + "
             << result1.c;

    g_result1 = result1;

    /*if(checkBox4->isChecked()==true)
    {
        double temper=start4string.toDouble();
        thermal4 = (result1.a*temper*temper+result1.b*temper+result1.c)*area4string.toDouble()/qua4string.toDouble();
        ///m_rtlineEdit4->setText(QString("%1").arg(thermal4));
    }

    if(checkBox5->isChecked()==true)
    {
        double temper=start5string.toDouble();
        thermal5 = (result1.a*temper*temper+result1.b*temper+result1.c)*area5string.toDouble()/qua5string.toDouble();
        ///m_rtlineEdit5->setText(QString("%1").arg(thermal5));
    }

    if(checkBox8->isChecked()==true)
    {
        double temper=start8string.toDouble();
        thermal8 = (result1.a*temper*temper+result1.b*temper+result1.c)*area8string.toDouble()/qua8string.toDouble();
        ///m_rtlineEdit8->setText(QString("%1").arg(thermal8));
    }

    if(checkBox10->isChecked()==true)
    {
        double temper=start10string.toDouble();
        thermal10 = (result1.a*temper*temper+result1.b*temper+result1.c)*area10string.toDouble()/qua10string.toDouble();
        ///m_rtlineEdit10->setText(QString("%1").arg(thermal10));
    }*/

}


// 拟合函数：y = a*x² + b*x + c
QuadraticFitResult ThermalWidget::quadraticFit(const QVector<QPointF>& points) {
    double sum_x = 0, sum_x2 = 0, sum_x3 = 0, sum_x4 = 0;
    double sum_y = 0, sum_xy = 0, sum_x2y = 0;

    for (const QPointF& p : points) {
        double x = p.x();
        double y = p.y();
        double x2 = x * x;
        double x3 = x2 * x;
        double x4 = x3 * x;

        sum_x += x;
        sum_x2 += x2;
        sum_x3 += x3;
        sum_x4 += x4;
        sum_y += y;
        sum_xy += x * y;
        sum_x2y += x2 * y;
    }

    double n = points.size();
    double matrix[3][3] = {
        {sum_x4, sum_x3, sum_x2},
        {sum_x3, sum_x2, sum_x},
        {sum_x2, sum_x,  n}
    };

    double rhs[3] = {sum_x2y, sum_xy, sum_y};

    // 高斯消元法解方程组
    double coeff[3] = {};
    for (int i = 0; i < 3; ++i) {
        // 寻找主元
        int maxRow = i;
        for (int j = i + 1; j < 3; ++j) {
            if (qAbs(matrix[j][i]) > qAbs(matrix[maxRow][i])) {
                maxRow = j;
            }
        }

        // 交换行
        if (maxRow != i) {
            for (int k = 0; k < 3; ++k) {
                qSwap(matrix[i][k], matrix[maxRow][k]);
            }
            qSwap(rhs[i], rhs[maxRow]);
        }

        // 消元
        for (int j = i + 1; j < 3; ++j) {
            double factor = matrix[j][i] / matrix[i][i];
            rhs[j] -= factor * rhs[i];
            for (int k = i; k < 3; ++k) {
                matrix[j][k] -= factor * matrix[i][k];
            }
        }
    }

    // 回代求解
    for (int i = 2; i >= 0; --i) {
        coeff[i] = rhs[i];
        for (int j = i + 1; j < 3; ++j) {
            coeff[i] -= matrix[i][j] * coeff[j];
        }
        coeff[i] /= matrix[i][i];
    }

    return {coeff[0], coeff[1], coeff[2]};
}

// 使用示例


void ThermalWidget::fit_test() {

    // 生成带噪声的测试数据 y = 2x² + 3x + 1 ± 随机噪声
    QVector<QPointF> points;
    for (int i = 0; i < 10; ++i) {
        double x = i;
        double noise = QRandomGenerator::global()->bounded(2.0);
        double y = 5 * x*x + 3 * x + 1 + noise;
        points.append(QPointF(x, y));
    }

    // 进行二次曲线拟合
    QuadraticFitResult result = quadraticFit(points);

    // 打印拟合结果
    qDebug() << "拟合方程: y = "
             << result.a << "x² + "
             << result.b << "x + "
             << result.c;

}




