2,新增“Apps”; 3,新增“Common”; 4,新增“FileList”; 5,新增“MediaX”; 6,新增“OpenSource”; 7,新增“Samples”; 8,新增“SoftwareBusinessLines”.
927 lines
34 KiB
C++
927 lines
34 KiB
C++
#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);
|
||
}
|
||
}
|
||
}
|