DiagramDesigner/diagramCavas/source/ptExtraInfoDlg.cpp

221 lines
6.7 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

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

#include "ptExtraInfoDlg.h"
#include "ui_ptExtraInfoDlg.h"
#include "baseProperty.h"
#include "basePropertyManager.h"
#include <QButtonGroup>
#include <QJsonArray>
PtExtraInfoDlg::PtExtraInfoDlg(QWidget *parent)
: BaseContentDlg(parent)
, ui(new Ui::ptExtraInfoDlg)
{
ui->setupUi(this);
_stateGroup_pt = new QButtonGroup(this);
_stateGroup_pt->addButton(ui->rb_tpt_pt,1);
_stateGroup_pt->addButton(ui->rb_spt_pt,0);
connect(ui->btn_add_pt,&QPushButton::clicked,this,&PtExtraInfoDlg::onAddClicked);
_count = 0;
}
PtExtraInfoDlg::~PtExtraInfoDlg()
{
delete ui;
}
void PtExtraInfoDlg::createGroupView(groupStateInfo infos)
{
for(auto& info:infos.info) {
propertyContentInfo inf;
inf.proName = info.name;
inf.proType = info.type;
_mapPro.insert(info.name,inf);
}
}
QMap<QString,propertyStateInfo> PtExtraInfoDlg::getPropertyValue(BaseProperty* pPro)
{
QMap<QString,propertyStateInfo> map;
for(auto &pro:_mapPro)
{
propertyStateInfo info;
info.type = pro.proType;
info.name = pro.proName;
if(info.name == "额定电压") //此处应为类型名
{
info.defaultValue = ui->le_ratedVol->text();
}
else if(info.name == "工频耐压")
{
info.defaultValue = ui->le_pfwv_pt->text();
}
else if(info.name == "冲击耐压")
{
info.defaultValue = ui->le_iwv_pt->text();
}
else if(info.name == "额定电压因数")
{
info.defaultValue = ui->le_ratedVolFactor->text();
}
else if(info.name == "一次绕组接线接地方式")
{
info.defaultValue = ui->le_pwwgm->text();
}
else if(info.name == "额定频率")
{
info.defaultValue = ui->le_rf_pt->text();
}
else if(info.name == "相数")
{
if(ui->rb_tpt_pt->isChecked())
info.defaultValue = 1;
else
info.defaultValue = 0;
}
else if(info.name == "pt绕组")
{
QJsonObject object;
QJsonArray arr;
for(auto info:_mapPT)
{
QJsonObject obj;
obj["id"] = info.id;
obj["transformationRatio"] = info.transRatio;
obj["accuracyClass"] = info.accuracyClass;
obj["secondaryLoadCapacity"] = info.secondaryLoadCapacity;
obj["windingConnectionMethod"] = info.windingConnectionMethod;
arr.push_back(obj);
}
object["winding"] = arr;
info.defaultValue = object;
}
map.insert(pro.proName,info);
}
return map;
}
void PtExtraInfoDlg::setPropertyValue(QVariant var)
{
QMap<QString,propertyStateInfo> map = var.value<QMap<QString,propertyStateInfo>>();
for(auto &info:map)
{
if(info.name == "额定电压") //此处应为类型名
{
ui->le_ratedVol->setText(QString::number(info.defaultValue.toDouble()));
}
else if(info.name == "工频耐压")
{
ui->le_pfwv_pt->setText(QString::number(info.defaultValue.toDouble()));
}
else if(info.name == "冲击耐压")
{
ui->le_iwv_pt->setText(QString::number(info.defaultValue.toDouble()));
}
else if(info.name == "额定电压因数")
{
ui->le_ratedVolFactor->setText(QString::number(info.defaultValue.toDouble()));
}
else if(info.name == "一次绕组接线接地方式")
{
ui->le_pwwgm->setText(info.defaultValue.toString());
}
else if(info.name == "额定频率")
{
ui->le_rf_pt->setText(QString::number(info.defaultValue.toDouble()));
}
else if(info.name == "相数")
{
if(info.defaultValue.toInt() == 1)
ui->rb_tpt_pt->setChecked(true);
else
ui->rb_spt_pt->setChecked(true);
}
else if(info.name == "pt绕组")
{
QJsonObject object = info.defaultValue.toJsonObject();
QJsonArray arr = object["winding"].toArray();
for (QJsonValueRef jsonObj : arr)
{
QJsonObject node = jsonObj.toObject();
int id = node["id"].toInt();
QString sTr = node["transformationRatio"].toString();
QString sAr = node["accuracyClass"].toString();
QString sSlc = node["secondaryLoadCapacity"].toString();
QString sWin = node["windingConnectionMethod"].toString();
addTableRow(sTr,sAr,sSlc,sWin,id);
}
}
}
}
void PtExtraInfoDlg::onAddClicked()
{
QString sTr = ui->le_tr_pt->text();
QString sAr = ui->le_ac_pt->text();
QString sSlc = ui->le_slc_pt->text();
QString sWinding = ui->cb_wcm->currentText();
addTableRow(sTr,sAr,sSlc,sWinding);
}
void PtExtraInfoDlg::onDeleteClicked()
{
QPushButton *btn = qobject_cast<QPushButton*>(sender());
if (btn) {
// 获取按钮在表格中的位置
QModelIndex index = ui->tb_pt->indexAt(btn->pos());
if (index.isValid()) {
QTableWidgetItem* pFirstItem = ui->tb_pt->item(index.row(),0);
int id = pFirstItem->data(Qt::UserRole).toInt();
_mapPT.remove(QString::number(id));
ui->tb_pt->removeRow(index.row());
}
}
}
void PtExtraInfoDlg::addTableRow(QString sTr,QString sAr,QString sSlc,QString sWinding,int id)
{
if(_mapPT.contains(QString::number(id)))
{
return;
}
PtExtraInfo info;
if(id == -1){ //缺省id时新建否则加载
info.id = _count;
_count += 1;
}
else{
info.id = id;
}
int row = ui->tb_pt->rowCount();
ui->tb_pt->insertRow(row);
// 变比(输入框)
QTableWidgetItem *item = new QTableWidgetItem(sTr);
item->setData(Qt::UserRole,info.id);
ui->tb_pt->setItem(row, 0, item);
// 精度等级(下拉框)
ui->tb_pt->setItem(row, 1, new QTableWidgetItem(sAr));
// 二次负载容量(输入框)
ui->tb_pt->setItem(row, 2, new QTableWidgetItem(sSlc));
// 绕组接法(下拉框)
ui->tb_pt->setItem(row, 3, new QTableWidgetItem(sWinding));
// 删除按钮
QPushButton *deleteBtn = new QPushButton("删除");
connect(deleteBtn, &QPushButton::clicked, this, &PtExtraInfoDlg::onDeleteClicked);
ui->tb_pt->setCellWidget(row, 4, deleteBtn);
info.transRatio = sTr;
info.accuracyClass = sAr;
info.secondaryLoadCapacity = sSlc;
info.windingConnectionMethod = sWinding;
_mapPT.insert(QString::number(info.id),info);
}