Files
chenzhen 222dda1e43 1,新增“App_ThermalImageSystem”;
2,新增“Apps”;
3,新增“Common”;
4,新增“FileList”;
5,新增“MediaX”;
6,新增“OpenSource”;
7,新增“Samples”;
8,新增“SoftwareBusinessLines”.
2026-02-14 23:03:23 +08:00

927 lines
34 KiB
C++
Raw Permalink 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 "commonhelper.h"
#include "frameless_helper.h"
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <stdio.h>
#include <vector>
#include <QFile>
#include <QMessageBox>
#include <QString>
#include <QStringList>
#include <QDateTime>
#include <QStatusBar>
#include <QDebug>
#include "xlsxcellrange.h"
#include "xlsxchart.h"
#include "xlsxchartsheet.h"
#include "xlsxdocument.h"
#include "xlsxrichstring.h"
#include "xlsxworkbook.h"
using namespace QXlsx;
MainWindow::MainWindow(QWidget* parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//
m_bMousePressed = false;
/*
QXlsx::Document xlsxW;
int row = 1;
int col = 1; //
// xlsxW.write("A1", "Hello Qt!"); // write "Hello Qt!" to cell(A,1). it's shared string.
QVariant writeValue = QString("Hello Qt!");
xlsxW.write(row, col, writeValue);
if (xlsxW.saveAs("Test.xlsx")) // save the document as 'Test.xlsx'
{
qDebug() << "[debug] success to write xlsx file";
}
else
{
qDebug() << "[debug][error] failed to write xlsx file";
exit(-1);
}
QXlsx::Document xlsxDoc("Test.xlsx");
xlsxDoc.isLoadPackage();
if (!xlsxDoc.sheetNames().isEmpty())
{
QString strSheetName = xlsxDoc.sheetNames().at(0);
xlsxDoc.selectSheet(strSheetName);
QXlsx::CellRange range = xlsxDoc.dimension();
QString strCellValue = xlsxDoc.cellAt(1, 1)->value().toString();
QXlsx::AbstractSheet* pCurrentSheet = xlsxDoc.sheet(strSheetName);
if (nullptr != pCurrentSheet)
{
pCurrentSheet->workbook()->setActiveSheet(0);
Worksheet* pWorksheet = (Worksheet*)pCurrentSheet->workbook()->activeSheet();
if (nullptr != pWorksheet)
{
QString strSheetName = pWorksheet->sheetName();
int jj = 0;
}
}
int jj = 0;
}
*/
// 初始化界面
InitStyle();
m_bThreadRunning_RecvCmd = false;
m_pThread_RecvCmd = nullptr;
m_pDataModel_MatchResult = std::shared_ptr<QStandardItemModel>(new QStandardItemModel(0, 9, ui->m_tableView_MatchResult));
ui->m_tableView_MatchResult->setModel(m_pDataModel_MatchResult.get());
QStringList list;
list.push_back("R1_0:型号");
list.push_back("R1_0:阻值(Ω)");
list.push_back("R1_1:型号");
list.push_back("R1_1:阻值(Ω)");
list.push_back("R2_0:型号");
list.push_back("R2_0:阻值(Ω)");
list.push_back("R2_1:型号");
list.push_back("R2_1:阻值(Ω)");
list.push_back("匹配电阻值(Ω)");
m_pDataModel_MatchResult->setHorizontalHeaderLabels(list);
ui->m_tableView_MatchResult->setColumnWidth(0, 120);
ui->m_tableView_MatchResult->setColumnWidth(1, 150);
ui->m_tableView_MatchResult->setColumnWidth(2, 120);
ui->m_tableView_MatchResult->setColumnWidth(3, 150);
ui->m_tableView_MatchResult->setColumnWidth(4, 120);
ui->m_tableView_MatchResult->setColumnWidth(5, 150);
ui->m_tableView_MatchResult->setColumnWidth(6, 120);
ui->m_tableView_MatchResult->setColumnWidth(7, 150);
ui->m_tableView_MatchResult->setColumnWidth(8, 150);
//
for (int i = 0; i < m_nDisplayCount_Max; i++)
{
m_pDataModel_MatchResult->insertRow(i);
m_pDataModel_MatchResult->setData(m_pDataModel_MatchResult->index(i, 0), QString(""));
m_pDataModel_MatchResult->item(i, 0)->setTextAlignment(Qt::AlignCenter);
m_pDataModel_MatchResult->setData(m_pDataModel_MatchResult->index(i, 1), QString(""));
m_pDataModel_MatchResult->item(i, 1)->setTextAlignment(Qt::AlignCenter);
m_pDataModel_MatchResult->setData(m_pDataModel_MatchResult->index(i, 2), QString(""));
m_pDataModel_MatchResult->item(i, 2)->setTextAlignment(Qt::AlignCenter);
m_pDataModel_MatchResult->setData(m_pDataModel_MatchResult->index(i, 3), QString(""));
m_pDataModel_MatchResult->item(i, 3)->setTextAlignment(Qt::AlignCenter);
m_pDataModel_MatchResult->setData(m_pDataModel_MatchResult->index(i, 4), QString(""));
m_pDataModel_MatchResult->item(i, 4)->setTextAlignment(Qt::AlignCenter);
m_pDataModel_MatchResult->setData(m_pDataModel_MatchResult->index(i, 5), QString(""));
m_pDataModel_MatchResult->item(i, 5)->setTextAlignment(Qt::AlignCenter);
m_pDataModel_MatchResult->setData(m_pDataModel_MatchResult->index(i, 6), QString(""));
m_pDataModel_MatchResult->item(i, 6)->setTextAlignment(Qt::AlignCenter);
m_pDataModel_MatchResult->setData(m_pDataModel_MatchResult->index(i, 7), QString(""));
m_pDataModel_MatchResult->item(i, 7)->setTextAlignment(Qt::AlignCenter);
m_pDataModel_MatchResult->setData(m_pDataModel_MatchResult->index(i, 8), QString(""));
m_pDataModel_MatchResult->item(i, 8)->setTextAlignment(Qt::AlignCenter);
}
//
m_eMatchMode = eMatchMode1;
//
m_bUpdateStatus = false;
m_nTryCount_UpdateStatus = 0;
////
Connect();
//
m_pStatusFrame = new StatusFrame();
m_pStatusFrame->setStyleSheet("QFrame#StatusFrame{border: 0px solid rgba(0,0,0,0);"
"background: transparent;}");
connect(m_pStatusFrame, &StatusFrame::sigRestItemData, this, &MainWindow::OnResetItemData);
this->statusBar()->addWidget(m_pStatusFrame, 1);
this->statusBar()->setSizeGripEnabled(true);
//
m_ptrGuiInvoker_RecvData = std::shared_ptr<GuiInvoker>(new GuiInvoker());
m_ptrGuiInvoker_Disconnect = std::shared_ptr<GuiInvoker>(new GuiInvoker());
}
MainWindow::~MainWindow()
{
if (m_bThreadRunning_RecvCmd)
{
m_bThreadRunning_RecvCmd = false;
m_pThread_RecvCmd->join();
delete m_pThread_RecvCmd;
m_pThread_RecvCmd = nullptr;
}
Disconnect();
disconnect(m_pStatusFrame, &StatusFrame::sigRestItemData, this, &MainWindow::OnResetItemData);
//
m_ptrGuiInvoker_RecvData.reset();
m_ptrGuiInvoker_Disconnect.reset();
delete ui;
}
void MainWindow::Connect()
{
connect(ui->m_pushButton_MatchMode1_NonUnified, &QPushButton::clicked, this, &MainWindow::OnButtonClicked);
connect(ui->m_pushButton_MatchMode1_Unified, &QPushButton::clicked, this, &MainWindow::OnButtonClicked);
connect(ui->m_pushButton_MatchMode2_NonUnified, &QPushButton::clicked, this, &MainWindow::OnButtonClicked);
connect(ui->m_pushButton_MatchMode2_Unified, &QPushButton::clicked, this, &MainWindow::OnButtonClicked);
connect(ui->m_pushButton_MatchMode3, &QPushButton::clicked, this, &MainWindow::OnButtonClicked);
connect(&m_varTimer_UpdateStatus, &QTimer::timeout, this, &MainWindow::OnTimer);
m_varTimer_UpdateStatus.setTimerType(Qt::PreciseTimer);
m_varTimer_UpdateStatus.start(10);
}
void MainWindow::Disconnect()
{
//
m_varTimer_UpdateStatus.stop();
disconnect(&m_varTimer_UpdateStatus, &QTimer::timeout, this, &MainWindow::OnTimer);
//
disconnect(ui->m_pushButton_MatchMode1_NonUnified, &QPushButton::clicked, this, &MainWindow::OnButtonClicked);
disconnect(ui->m_pushButton_MatchMode1_Unified, &QPushButton::clicked, this, &MainWindow::OnButtonClicked);
disconnect(ui->m_pushButton_MatchMode2_NonUnified, &QPushButton::clicked, this, &MainWindow::OnButtonClicked);
disconnect(ui->m_pushButton_MatchMode2_Unified, &QPushButton::clicked, this, &MainWindow::OnButtonClicked);
disconnect(ui->m_pushButton_MatchMode3, &QPushButton::clicked, this, &MainWindow::OnButtonClicked);
}
void MainWindow::DoMatchMode1_NonUnified()
{
if (ui->m_lineEdit_MatchMode1_VCC->text().isEmpty()
|| ui->m_lineEdit_MatchMode1_Vout->text().isEmpty()
|| ui->m_lineEdit_MatchMode1_VoltageDegree->text().isEmpty()
)
{
CommonHelper::ShowMessageBoxError("计算参数不能为空,请输入有效参数!", this);
return;
}
//
UpdateTableViewHeader(eMatchMode1);
ResetItemData();
//
double dVCC = ui->m_lineEdit_MatchMode1_VCC->text().toDouble();
double dVout = ui->m_lineEdit_MatchMode1_Vout->text().toDouble();
double dVoltageDegree = ui->m_lineEdit_MatchMode1_VoltageDegree->text().toDouble();
double res_real[77] = { 100, 150, 180, 200, 220, 300, 330, 360, 430, 510, 560, 620, 680, 750, 820, 910, 1000, 1200, 1500, 1600, 1800, 2000, 2200, 2400, 2700, 3000, 3300, 3600, 3900, 4300, 4700, 5100, 5600, 6200, 6800, 7500, 8200, 9100, 12000, 18000, 10000, 20000, 22000, 27000, 30000, 33000, 36000, 39000, 43000, 47000, 51000, 56000, 62000, 68000, 75000, 82000, 100000, 110000, 120000, 150000, 160000, 180000, 200000, 220000, 270000, 300000, 330000, 360000, 90000, 430000, 470000, 510000, 560000, 620000, 680000, 820000, 910000 };
vector<Resistance_UnifiedNode> vecResistance_UnifiedNode;
vecResistance_UnifiedNode.clear();
for (int i = 0; i < 77; i++)
{
Resistance_UnifiedNode varResistance_UnifiedNode = {0};
varResistance_UnifiedNode.dResistance_R_0 = res_real[i];
varResistance_UnifiedNode.dResistance_R_1 = 0;
varResistance_UnifiedNode.bUnified = false;
vecResistance_UnifiedNode.push_back(varResistance_UnifiedNode);
}
int nDisplayCount = 0;
for (vector<Resistance_UnifiedNode>::iterator iterA = vecResistance_UnifiedNode.begin();
iterA != vecResistance_UnifiedNode.end();
++iterA)
{
for (vector<Resistance_UnifiedNode>::iterator iterB = vecResistance_UnifiedNode.begin();
iterB != vecResistance_UnifiedNode.end();
++iterB)
{
double dResistance_R1 = iterA->dResistance_R_0;
double dResistance_R2 = iterB->dResistance_R_0;
double dDeltaVoltage = dVCC * (dResistance_R2 / (dResistance_R1 + dResistance_R2)) - dVout;
if (abs(dDeltaVoltage) < (dVoltageDegree / 1000.0))
{
SetItemData(nDisplayCount,
"R1_0", iterA->dResistance_R_0,
"R1_1", iterA->dResistance_R_1,
"R2_0", iterB->dResistance_R_0,
"R2_1", iterB->dResistance_R_1,
dVCC * dResistance_R2 / (dResistance_R1 + dResistance_R2));
nDisplayCount++;
//listBox1.Items.Add("R1_0" + Convert.ToString(res_real[b]) + " " + "R1_1" + "0000" + " " + "R2_0" + Convert.ToString(res_real[a]) + " " + "R2_1" + "0000" + " " + Convert.ToString(Convert.ToDouble(vcctext.Text) * res_real[a] / (res_real[a] + res_real[b])));
qDebug("R1_0: %f R1_1: %f R2_0: %f R2_1: %f %f", iterA->dResistance_R_0, iterA->dResistance_R_1, iterB->dResistance_R_0, iterB->dResistance_R_1, dVCC * dResistance_R2 / (dResistance_R1 + dResistance_R2));
}
if (nDisplayCount > m_nDisplayCount_Max)
{
break;
}
}
}
}
void MainWindow::DoMatchMode1_Unified()
{
if (ui->m_lineEdit_MatchMode1_VCC->text().isEmpty()
|| ui->m_lineEdit_MatchMode1_Vout->text().isEmpty()
|| ui->m_lineEdit_MatchMode1_VoltageDegree->text().isEmpty()
)
{
CommonHelper::ShowMessageBoxError("计算参数不能为空,请输入有效参数!", this);
return;
}
//
UpdateTableViewHeader(eMatchMode1);
ResetItemData();
//
double dVCC = ui->m_lineEdit_MatchMode1_VCC->text().toDouble();
double dVout = ui->m_lineEdit_MatchMode1_Vout->text().toDouble();
double dVoltageDegree = ui->m_lineEdit_MatchMode1_VoltageDegree->text().toDouble();
double res_real[77] = { 100, 150, 180, 200, 220, 300, 330, 360, 430, 510, 560, 620, 680, 750, 820, 910, 1000, 1200, 1500, 1600, 1800, 2000, 2200, 2400, 2700, 3000, 3300, 3600, 3900, 4300, 4700, 5100, 5600, 6200, 6800, 7500, 8200, 9100, 12000, 18000, 10000, 20000, 22000, 27000, 30000, 33000, 36000, 39000, 43000, 47000, 51000, 56000, 62000, 68000, 75000, 82000, 100000, 110000, 120000, 150000, 160000, 180000, 200000, 220000, 270000, 300000, 330000, 360000, 90000, 430000, 470000, 510000, 560000, 620000, 680000, 820000, 910000 };
vector<Resistance_UnifiedNode> vecResistance_UnifiedNode;
vecResistance_UnifiedNode.clear();
for (int i = 0; i < 77; i++)
{
Resistance_UnifiedNode varResistance_UnifiedNode = {0};
varResistance_UnifiedNode.dResistance_R_0 = res_real[i];
varResistance_UnifiedNode.dResistance_R_1 = 0;
varResistance_UnifiedNode.bUnified = false;
vecResistance_UnifiedNode.push_back(varResistance_UnifiedNode);
}
for (int i = 0; i < 77; i++)
{
for (int j = i; j < 77; j++)
{
Resistance_UnifiedNode varResistance_UnifiedNode = {0};
varResistance_UnifiedNode.dResistance_R_0 = res_real[i];
varResistance_UnifiedNode.dResistance_R_1 = res_real[j];
varResistance_UnifiedNode.bUnified = true;
vecResistance_UnifiedNode.push_back(varResistance_UnifiedNode);
}
}
int nDisplayCount = 0;
for (vector<Resistance_UnifiedNode>::iterator iterA = vecResistance_UnifiedNode.begin();
iterA != vecResistance_UnifiedNode.end();
++iterA)
{
for (vector<Resistance_UnifiedNode>::iterator iterB = iterA;
iterB != vecResistance_UnifiedNode.end();
++iterB)
{
double dResistance_R1 = (iterA->bUnified) ? ((iterA->dResistance_R_0 * iterA->dResistance_R_1) / (iterA->dResistance_R_0 + iterA->dResistance_R_1)) : iterA->dResistance_R_0;
double dResistance_R2 = (iterB->bUnified) ? ((iterB->dResistance_R_0 * iterB->dResistance_R_1) / (iterB->dResistance_R_0 + iterB->dResistance_R_1)) : iterB->dResistance_R_0;
double dDeltaVoltage = dVCC * (dResistance_R2 / (dResistance_R1 + dResistance_R2)) - dVout;
if (abs(dDeltaVoltage) < (dVoltageDegree / 1000.0))
{
SetItemData(nDisplayCount,
"R1_0", iterA->dResistance_R_0,
"R1_1", iterA->dResistance_R_1,
"R2_0", iterB->dResistance_R_0,
"R2_1", iterB->dResistance_R_1,
dVCC * dResistance_R2 / (dResistance_R1 + dResistance_R2));
//qDebug("R1_0: %f R1_1: %f R2_0: %f R2_1: %f %f", iterA->dResistance_R_0, iterA->dResistance_R_1, iterB->dResistance_R_0, iterB->dResistance_R_1, dVCC * dResistance_R2 / (dResistance_R1 + dResistance_R2));
nDisplayCount++;
}
if (nDisplayCount > m_nDisplayCount_Max)
{
break;
}
}
if (nDisplayCount > m_nDisplayCount_Max)
{
break;
}
}
int jj = 0;
}
void MainWindow::DoMatchMode2_NonUnified()
{
if (ui->m_lineEdit_MatchMode2_Vout->text().isEmpty()
|| ui->m_lineEdit_MatchMode2_Vfb->text().isEmpty()
|| ui->m_lineEdit_MatchMode2_VoltageDegree->text().isEmpty()
)
{
CommonHelper::ShowMessageBoxError("计算参数不能为空,请输入有效参数!", this);
return;
}
//
UpdateTableViewHeader(eMatchMode2);
ResetItemData();
//
double dVout = ui->m_lineEdit_MatchMode2_Vout->text().toDouble();
double dVfb = ui->m_lineEdit_MatchMode2_Vfb->text().toDouble();
double dVoltageDegree = ui->m_lineEdit_MatchMode2_VoltageDegree->text().toDouble();
double res_real[77] = { 100, 150, 180, 200, 220, 300, 330, 360, 430, 510, 560, 620, 680, 750, 820, 910, 1000, 1200, 1500, 1600, 1800, 2000, 2200, 2400, 2700, 3000, 3300, 3600, 3900, 4300, 4700, 5100, 5600, 6200, 6800, 7500, 8200, 9100, 12000, 18000, 10000, 20000, 22000, 27000, 30000, 33000, 36000, 39000, 43000, 47000, 51000, 56000, 62000, 68000, 75000, 82000, 100000, 110000, 120000, 150000, 160000, 180000, 200000, 220000, 270000, 300000, 330000, 360000, 90000, 430000, 470000, 510000, 560000, 620000, 680000, 820000, 910000 };
vector<Resistance_UnifiedNode> vecResistance_UnifiedNode;
vecResistance_UnifiedNode.clear();
for (int i = 0; i < 77; i++)
{
Resistance_UnifiedNode varResistance_UnifiedNode = {0};
varResistance_UnifiedNode.dResistance_R_0 = res_real[i];
varResistance_UnifiedNode.dResistance_R_1 = 0;
varResistance_UnifiedNode.bUnified = false;
vecResistance_UnifiedNode.push_back(varResistance_UnifiedNode);
}
int nDisplayCount = 0;
for (vector<Resistance_UnifiedNode>::iterator iterA = vecResistance_UnifiedNode.begin();
iterA != vecResistance_UnifiedNode.end();
++iterA)
{
for (vector<Resistance_UnifiedNode>::iterator iterB = vecResistance_UnifiedNode.begin();
iterB != vecResistance_UnifiedNode.end();
++iterB)
{
double dResistance_R1 = iterA->dResistance_R_0;
double dResistance_R2 = iterB->dResistance_R_0;
double dDeltaVoltage = dVfb * (1 + dResistance_R1 / dResistance_R2) - dVout;
if (abs(dDeltaVoltage) < (dVoltageDegree / 1000.0))
{
SetItemData(nDisplayCount,
"R1_0", iterA->dResistance_R_0,
"R1_1", iterA->dResistance_R_1,
"R2_0", iterB->dResistance_R_0,
"R2_1", iterB->dResistance_R_1,
dVfb * (1 + dResistance_R1 / dResistance_R2));
//qDebug("R1_0: %f R1_1: %f R2_0: %f R2_1: %f %f", iterA->dResistance_R_0, iterA->dResistance_R_1, iterB->dResistance_R_0, iterB->dResistance_R_1, dVfb * (1 + dResistance_R1 / dResistance_R2));
}
if (nDisplayCount > m_nDisplayCount_Max)
{
break;
}
}
if (nDisplayCount > m_nDisplayCount_Max)
{
break;
}
}
}
void MainWindow::DoMatchMode2_Unified()
{
if (ui->m_lineEdit_MatchMode2_Vout->text().isEmpty()
|| ui->m_lineEdit_MatchMode2_Vfb->text().isEmpty()
|| ui->m_lineEdit_MatchMode2_VoltageDegree->text().isEmpty()
)
{
CommonHelper::ShowMessageBoxError("计算参数不能为空,请输入有效参数!", this);
return;
}
//
UpdateTableViewHeader(eMatchMode2);
ResetItemData();
//
double dVout = ui->m_lineEdit_MatchMode2_Vout->text().toDouble();
double dVfb = ui->m_lineEdit_MatchMode2_Vfb->text().toDouble();
double dVoltageDegree = ui->m_lineEdit_MatchMode2_VoltageDegree->text().toDouble();
double res_real[77] = { 100, 150, 180, 200, 220, 300, 330, 360, 430, 510, 560, 620, 680, 750, 820, 910, 1000, 1200, 1500, 1600, 1800, 2000, 2200, 2400, 2700, 3000, 3300, 3600, 3900, 4300, 4700, 5100, 5600, 6200, 6800, 7500, 8200, 9100, 12000, 18000, 10000, 20000, 22000, 27000, 30000, 33000, 36000, 39000, 43000, 47000, 51000, 56000, 62000, 68000, 75000, 82000, 100000, 110000, 120000, 150000, 160000, 180000, 200000, 220000, 270000, 300000, 330000, 360000, 90000, 430000, 470000, 510000, 560000, 620000, 680000, 820000, 910000 };
vector<Resistance_UnifiedNode> vecResistance_UnifiedNode;
vecResistance_UnifiedNode.clear();
for (int i = 0; i < 77; i++)
{
Resistance_UnifiedNode varResistance_UnifiedNode = {0};
varResistance_UnifiedNode.dResistance_R_0 = res_real[i];
varResistance_UnifiedNode.dResistance_R_1 = 0;
varResistance_UnifiedNode.bUnified = false;
vecResistance_UnifiedNode.push_back(varResistance_UnifiedNode);
}
for (int i = 0; i < 77; i++)
{
for (int j = i; j < 77; j++)
{
Resistance_UnifiedNode varResistance_UnifiedNode = {0};
varResistance_UnifiedNode.dResistance_R_0 = res_real[i];
varResistance_UnifiedNode.dResistance_R_1 = res_real[j];
varResistance_UnifiedNode.bUnified = true;
vecResistance_UnifiedNode.push_back(varResistance_UnifiedNode);
}
}
int nDisplayCount = 0;
for (vector<Resistance_UnifiedNode>::iterator iterA = vecResistance_UnifiedNode.begin();
iterA != vecResistance_UnifiedNode.end();
++iterA)
{
for (vector<Resistance_UnifiedNode>::iterator iterB = iterA;
iterB != vecResistance_UnifiedNode.end();
++iterB)
{
double dResistance_R1 = (iterA->bUnified) ? ((iterA->dResistance_R_0 * iterA->dResistance_R_1) / (iterA->dResistance_R_0 + iterA->dResistance_R_1)) : iterA->dResistance_R_0;
double dResistance_R2 = (iterB->bUnified) ? ((iterB->dResistance_R_0 * iterB->dResistance_R_1) / (iterB->dResistance_R_0 + iterB->dResistance_R_1)) : iterB->dResistance_R_0;
double dDeltaVoltage = dVfb * (1 + dResistance_R1 / dResistance_R2) - dVout;
if (abs(dDeltaVoltage) < (dVoltageDegree / 1000.0))
{
SetItemData(nDisplayCount,
"R1_0", iterA->dResistance_R_0,
"R1_1", iterA->dResistance_R_1,
"R2_0", iterB->dResistance_R_0,
"R2_1", iterB->dResistance_R_1,
dVfb * (1 + dResistance_R1 / dResistance_R2));
nDisplayCount++;
//qDebug("R1_0: %f R1_1: %f R2_0: %f R2_1: %f %f", iterA->dResistance_R_0, iterA->dResistance_R_1, iterB->dResistance_R_0, iterB->dResistance_R_1, dVfb * (1 + dResistance_R1 / dResistance_R2));
}
if (nDisplayCount > m_nDisplayCount_Max)
{
break;
}
}
if (nDisplayCount > m_nDisplayCount_Max)
{
break;
}
}
int jj = 0;
}
void MainWindow::DoMatchMode3()
{
if (ui->m_lineEdit_MatchMode3_ResistanceValue->text().isEmpty()
|| ui->m_lineEdit_MatchMode3_ResistanceDegree->text().isEmpty()
)
{
CommonHelper::ShowMessageBoxError("计算参数不能为空,请输入有效参数!", this);
return;
}
//
UpdateTableViewHeader(eMatchMode3);
ResetItemData();
//
double dResistanceValue = ui->m_lineEdit_MatchMode3_ResistanceValue->text().toDouble();
double dResistanceDegree = ui->m_lineEdit_MatchMode3_ResistanceDegree->text().toDouble();
double res_real[77] = { 100, 150, 180, 200, 220, 300, 330, 360, 430, 510, 560, 620, 680, 750, 820, 910, 1000, 1200, 1500, 1600, 1800, 2000, 2200, 2400, 2700, 3000, 3300, 3600, 3900, 4300, 4700, 5100, 5600, 6200, 6800, 7500, 8200, 9100, 12000, 18000, 10000, 20000, 22000, 27000, 30000, 33000, 36000, 39000, 43000, 47000, 51000, 56000, 62000, 68000, 75000, 82000, 100000, 110000, 120000, 150000, 160000, 180000, 200000, 220000, 270000, 300000, 330000, 360000, 90000, 430000, 470000, 510000, 560000, 620000, 680000, 820000, 910000 };
vector<Resistance_UnifiedNode> vecResistance_UnifiedNode;
vecResistance_UnifiedNode.clear();
for (int i = 0; i < 77; i++)
{
Resistance_UnifiedNode varResistance_UnifiedNode = {0};
varResistance_UnifiedNode.dResistance_R_0 = res_real[i];
varResistance_UnifiedNode.dResistance_R_1 = 0;
varResistance_UnifiedNode.bUnified = false;
vecResistance_UnifiedNode.push_back(varResistance_UnifiedNode);
}
for (int i = 0; i < 77; i++)
{
for (int j = i; j < 77; j++)
{
Resistance_UnifiedNode varResistance_UnifiedNode = {0};
varResistance_UnifiedNode.dResistance_R_0 = res_real[i];
varResistance_UnifiedNode.dResistance_R_1 = res_real[j];
varResistance_UnifiedNode.bUnified = true;
vecResistance_UnifiedNode.push_back(varResistance_UnifiedNode);
}
}
int nDisplayCount = 0;
for (vector<Resistance_UnifiedNode>::iterator iterA = vecResistance_UnifiedNode.begin();
iterA != vecResistance_UnifiedNode.end();
++iterA)
{
for (vector<Resistance_UnifiedNode>::iterator iterB = iterA;
iterB != vecResistance_UnifiedNode.end();
++iterB)
{
double dResistance_R1 = (iterA->bUnified) ? ((iterA->dResistance_R_0 * iterA->dResistance_R_1) / (iterA->dResistance_R_0 + iterA->dResistance_R_1)) : iterA->dResistance_R_0;
double dResistance_R2 = (iterB->bUnified) ? ((iterB->dResistance_R_0 * iterB->dResistance_R_1) / (iterB->dResistance_R_0 + iterB->dResistance_R_1)) : iterB->dResistance_R_0;
double dDeltaResistance = (dResistance_R1 + dResistance_R2) - dResistanceValue;
if (abs(dDeltaResistance) < dResistanceDegree)
{
SetItemData(nDisplayCount,
"R1_0", iterA->dResistance_R_0,
"R1_1", iterA->dResistance_R_1,
"R2_0", iterB->dResistance_R_0,
"R2_1", iterB->dResistance_R_1,
(dResistance_R1 + dResistance_R2));
nDisplayCount++;
//qDebug("R1_0: %f R1_1: %f R2_0: %f R2_1: %f %f", iterA->dResistance_R_0, iterA->dResistance_R_1, iterB->dResistance_R_0, iterB->dResistance_R_1, (dResistance_R1 + dResistance_R2));
}
if (nDisplayCount > m_nDisplayCount_Max)
{
break;
}
}
if (nDisplayCount > m_nDisplayCount_Max)
{
break;
}
}
int jj = 0;
}
void MainWindow::ResetItemData()
{
for (int i = 0; i < m_nDisplayCount_Max; i++)
{
m_pDataModel_MatchResult->setData(m_pDataModel_MatchResult->index(i, 0), QString(""));
m_pDataModel_MatchResult->setData(m_pDataModel_MatchResult->index(i, 1), QString(""));
m_pDataModel_MatchResult->setData(m_pDataModel_MatchResult->index(i, 2), QString(""));
m_pDataModel_MatchResult->setData(m_pDataModel_MatchResult->index(i, 3), QString(""));
m_pDataModel_MatchResult->setData(m_pDataModel_MatchResult->index(i, 4), QString(""));
m_pDataModel_MatchResult->setData(m_pDataModel_MatchResult->index(i, 5), QString(""));
m_pDataModel_MatchResult->setData(m_pDataModel_MatchResult->index(i, 6), QString(""));
m_pDataModel_MatchResult->setData(m_pDataModel_MatchResult->index(i, 7), QString(""));
m_pDataModel_MatchResult->setData(m_pDataModel_MatchResult->index(i, 8), QString(""));
}
}
void MainWindow::SetItemData(int nItemIndex,
const QString& strModeType_R1_0, double dValue_R1_0,
const QString& strModeType_R1_1, double dValue_R1_1,
const QString& strModeType_R2_0, double dValue_R2_0,
const QString& strModeType_R2_1, double dValue_R2_1,
double dMatchResult)
{
if (nItemIndex < 0 || nItemIndex > (m_nDisplayCount_Max - 1))
{
return;
}
m_pDataModel_MatchResult->setData(m_pDataModel_MatchResult->index(nItemIndex, 0), QString("%1").arg(strModeType_R1_0));
m_pDataModel_MatchResult->setData(m_pDataModel_MatchResult->index(nItemIndex, 1), QString("%1").arg(QString::number(dValue_R1_0, 'f', 0)));
m_pDataModel_MatchResult->setData(m_pDataModel_MatchResult->index(nItemIndex, 2), QString("%1").arg(strModeType_R1_1));
m_pDataModel_MatchResult->setData(m_pDataModel_MatchResult->index(nItemIndex, 3), QString("%1").arg(QString::number(dValue_R1_1, 'f', 0)));
m_pDataModel_MatchResult->setData(m_pDataModel_MatchResult->index(nItemIndex, 4), QString("%1").arg(strModeType_R2_0));
m_pDataModel_MatchResult->setData(m_pDataModel_MatchResult->index(nItemIndex, 5), QString("%1").arg(QString::number(dValue_R2_0, 'f', 0)));
m_pDataModel_MatchResult->setData(m_pDataModel_MatchResult->index(nItemIndex, 6), QString("%1").arg(strModeType_R2_1));
m_pDataModel_MatchResult->setData(m_pDataModel_MatchResult->index(nItemIndex, 7), QString("%1").arg(QString::number(dValue_R2_1, 'f', 0)));
m_pDataModel_MatchResult->setData(m_pDataModel_MatchResult->index(nItemIndex, 8), QString("%1").arg(QString::number(dMatchResult, 'f', 3)));
}
void MainWindow::UpdateTableViewHeader(eMatchMode eMode)
{
if (eMode == m_eMatchMode)
{
return;
}
m_eMatchMode = eMode;
if (eMode == eMatchMode2)
{
QStandardItem* pItem = m_pDataModel_MatchResult->takeHorizontalHeaderItem(8);
delete pItem;
pItem = nullptr;
m_pDataModel_MatchResult->setHorizontalHeaderItem(8, new QStandardItem("匹配电压值(V)"));
}
else
{
QStandardItem* pItem = m_pDataModel_MatchResult->takeHorizontalHeaderItem(8);
delete pItem;
pItem = nullptr;
m_pDataModel_MatchResult->setHorizontalHeaderItem(8, new QStandardItem("匹配电阻值(Ω)"));
}
//
for (int i = 0; i < m_nDisplayCount_Max; i++)
{
m_pDataModel_MatchResult->setData(m_pDataModel_MatchResult->index(i, 0), QString(""));
m_pDataModel_MatchResult->item(i, 0)->setTextAlignment(Qt::AlignCenter);
m_pDataModel_MatchResult->setData(m_pDataModel_MatchResult->index(i, 1), QString(""));
m_pDataModel_MatchResult->item(i, 1)->setTextAlignment(Qt::AlignCenter);
m_pDataModel_MatchResult->setData(m_pDataModel_MatchResult->index(i, 2), QString(""));
m_pDataModel_MatchResult->item(i, 2)->setTextAlignment(Qt::AlignCenter);
m_pDataModel_MatchResult->setData(m_pDataModel_MatchResult->index(i, 3), QString(""));
m_pDataModel_MatchResult->item(i, 3)->setTextAlignment(Qt::AlignCenter);
m_pDataModel_MatchResult->setData(m_pDataModel_MatchResult->index(i, 4), QString(""));
m_pDataModel_MatchResult->item(i, 4)->setTextAlignment(Qt::AlignCenter);
m_pDataModel_MatchResult->setData(m_pDataModel_MatchResult->index(i, 5), QString(""));
m_pDataModel_MatchResult->item(i, 5)->setTextAlignment(Qt::AlignCenter);
m_pDataModel_MatchResult->setData(m_pDataModel_MatchResult->index(i, 6), QString(""));
m_pDataModel_MatchResult->item(i, 6)->setTextAlignment(Qt::AlignCenter);
m_pDataModel_MatchResult->setData(m_pDataModel_MatchResult->index(i, 7), QString(""));
m_pDataModel_MatchResult->item(i, 7)->setTextAlignment(Qt::AlignCenter);
m_pDataModel_MatchResult->setData(m_pDataModel_MatchResult->index(i, 8), QString(""));
m_pDataModel_MatchResult->item(i, 8)->setTextAlignment(Qt::AlignCenter);
}
}
void MainWindow::OnUpdateUI(void* pParams, void* pOwner)
{
MainWindow* pThis = reinterpret_cast<MainWindow*>(pOwner);
if (nullptr == pThis)
{
return;
}
pThis->DoUpdateUI(pParams);
}
void MainWindow::DoUpdateUI(void* pParams)
{
if (m_listMsgData.empty())
{
return;
}
}
void MainWindow::OnButtonClicked()
{
// 分压电阻模式(无电阻并联组合)
if (sender() == ui->m_pushButton_MatchMode1_NonUnified)
{
DoMatchMode1_NonUnified();
}
// 分压电阻模式(有电阻并联组合)
if (sender() == ui->m_pushButton_MatchMode1_Unified)
{
DoMatchMode1_Unified();
}
// 电源输出模式(无电阻并联组合)
if (sender() == ui->m_pushButton_MatchMode2_NonUnified)
{
DoMatchMode2_NonUnified();
}
// 电源输出模式(有电阻并联组合)
if (sender() == ui->m_pushButton_MatchMode2_Unified)
{
DoMatchMode2_Unified();
}
// 并联电阻模式
if (sender() == ui->m_pushButton_MatchMode3)
{
DoMatchMode3();
}
}
void MainWindow::OnCurrentIndexChanged(int nIndex)
{
}
void MainWindow::InitStyle()
{
m_bMousePressed = false;
//this->setWindowFlags(Qt::Dialog);
/*
//安装事件监听器,让标题栏识别鼠标双击
ui->lblTitle->installEventFilter(this);
this->setWindowFlags(Qt::FramelessWindowHint
| Qt::WindowSystemMenuHint
| Qt::WindowMinimizeButtonHint);
FramelessHelper *pHelper = new FramelessHelper(this);
pHelper->activateOn(this); //激活当前窗体
pHelper->setTitleHeight(ui->wgtTitleBar->height()); //设置窗体的标题栏高度
*/
CommonHelper::SetStyle("blue");//"blue"//"dark"
}
void MainWindow::resizeEvent(QResizeEvent* event)
{
//SetVisible_TcpClient(m_bNetworkOn);
}
bool MainWindow::eventFilter(QObject* obj, QEvent* event)
{
//if (ui->lblTitle == obj)
{
if (event->type() == QEvent::MouseButtonPress)
{
QMouseEvent* mouseEvent = dynamic_cast<QMouseEvent*>(event);
if (mouseEvent->button() == Qt::LeftButton)
{
m_bMousePressed = true;
m_ptMouse = mouseEvent->globalPos() - pos();
mouseEvent->accept();
}
return true;
}
else if (event->type() == QEvent::MouseMove)
{
QMouseEvent* mouseEvent = dynamic_cast<QMouseEvent*>(event);
if (m_bMousePressed && this->windowState() != Qt::WindowMaximized)
{
if (mouseEvent->globalY() <= qApp->primaryScreen()->availableGeometry().bottom())
{
move(mouseEvent->globalPos() - m_ptMouse);
mouseEvent->accept();
}
else
{
/*
qApp->desktop()->cursor().setPos(
qApp->desktop()->cursor().pos().x(),
qApp->desktop()->availableGeometry().bottom()
);
*/
}
}
return true;
}
else if (event->type() == QEvent::MouseButtonRelease)
{
QMouseEvent* mouseEvent = dynamic_cast<QMouseEvent*>(event);
if (mouseEvent->button() == Qt::LeftButton)
{
m_bMousePressed = false;
mouseEvent->accept();
}
return true;
}
}
return QMainWindow::eventFilter(obj, event);
}
void MainWindow::ThreadEntry(pCallback_ThreadFun pThreadFun, void* pOwner)
{
MainWindow* pThis = reinterpret_cast<MainWindow*>(pOwner);
if (NULL == pThis)
{
return;
}
(pThis->*pThreadFun)();
}
void MainWindow::OnResetItemData()
{
ResetItemData();
/*
m_bUpdateStatus = true;
m_nTryCount_UpdateStatus = 5;
m_pStatusFrame->ResetCount();
*/
}
void MainWindow::OnTimer()
{
if (sender() == &m_varTimer_UpdateStatus)
{
if (m_bUpdateStatus)
{
//
m_nTryCount_UpdateStatus--;
if (m_nTryCount_UpdateStatus < 0)
{
m_bUpdateStatus = false;
}
ui->m_tableView_MatchResult->scrollToBottom();
//
//m_pStatusFrame->Update(m_nRecvCount, m_nRecvDataSize, m_nSendCount, m_nSendDataSize);
}
}
}