add base bay to project bay

This commit is contained in:
baiYue 2025-10-21 18:46:51 +08:00
parent 61a1da4d17
commit 52e2efdfcf
16 changed files with 490 additions and 173 deletions

View File

@ -519,6 +519,8 @@ struct DiagramEditorBayInfo //组态编辑间隔信息
{
QString name; //间隔名
int nLayout; //布局 0纵向1横向
QList<QUuid> lstFrom; //起始
QList<QUuid> lstTo; //结束
QMap<QString,DiagramEditorRouteInfo> mapRoute; //线路信息
QMap<QString,DiagramEditorComponentInfo> mapComponent; //设备信息
};
@ -843,6 +845,7 @@ struct bayInfo
{
QUuid uuid;
QString name;
QString tag;
QString type;
double unom;
double fla;
@ -871,6 +874,7 @@ struct itemPageInfo //page中保存的item信息(大小位置etc)
QPointF pos;
double dWidth = 0.0;
double dHeight = 0.0;
double dRotate = 0.0;
};
/*struct busStability

View File

@ -14,6 +14,7 @@ class PowerEntity;
class DiagramEditorWizard;
class EditPanel;
class GraphicsBaseModelItem;
class EditBaseItem;
class DIAGRAM_DESIGNER_PUBLIC DiagramCavas : public QMdiArea
{
@ -54,12 +55,11 @@ public slots:
void onSignal_createEditPanel(QString);
EditPanel* onSignal_addEditPanel(QString);
void onSignal_addEditWizard(QString);
void onSignal_wizardFinished(QString,QMap<QUuid,GraphicsBaseModelItem*>);
void onSignal_wizardFinished(QString,QMap<QUuid,GraphicsBaseModelItem*>,QList<EditBaseItem*>);
/*********************************间隔**************************************/
void onSignl_openCurrentBay();
private:
void removePanel(PowerEntity*);
void autoSetModelName(GraphicsBaseModelItem*); //如果此页的工程模已被设置将projectName更新到item
private:
QMap<QString,QPair<DrawingPanel*,QMdiSubWindow*>> m_mapDrawPanel;
int _pageIndex;

View File

@ -20,7 +20,7 @@ public:
virtual void setType(EditorItemType tpe) {nType = tpe;}
virtual EditorItemType getType(){return nType;}
virtual void setBoundingRect(QRectF rec) {m_boundingRect = rec;}
virtual QRectF boundingRect() const {return m_boundingRect;}
virtual QRectF boundingRect() const override {return m_boundingRect;}
virtual void setBlockData(QPointer<DiagramEditorBaseBlock> p){_pBlock = p;}
virtual QPointer<DiagramEditorBaseBlock> getBlockData(){return _pBlock;}
virtual QString getShowType(){return QString();} //获取显示类别

View File

@ -12,6 +12,7 @@ class DiagramEditorTransformerBlock;
class EditPanel;
class DiagramEditorWizard;
class DiagramCavas;
class EditBaseItem;
int const g_nHorizontalBlockSpacing = 100; //间隔横向间距
@ -58,13 +59,13 @@ public:
void generateItemByModel(QStandardItemModel* pModel,int nFrom = 0,QPoint delta = QPoint(0,0)); //0间隔1变压器
QList<DiagramEditorComponentInfo> generateItemByInfo(QMap<QString,DiagramEditorRouteInfo> mapRoute,QMap<QString,DiagramEditorComponentInfo> mapCompo,QPointF delta = QPointF(0,0)); //根据data生成item
void generateOutConnection(QList<DiagramEditorComponentInfo>,int nTypeTransCon,int nPos = 0); //生成外部连接手动bind的连接 nTypeTransCon变压器连线类型,1中性点连接2外部连接,nPos中性点连接时的位置
QMultiMap<int,QUuid> generateOutConnection(QList<DiagramEditorComponentInfo>,int nTypeTransCon,int nPos = 0); //生成外部连接手动bind的连接 nTypeTransCon变压器连线类型,1中性点连接2外部连接,nPos中性点连接时的位置
QRectF updateTarget(QMap<QString,DiagramEditorRouteInfo>&,QMap<QString,DiagramEditorComponentInfo>&,int nLayout,int nSource,bool saveToModel = true); //更新位置 nLayout主次朝向:8421,8421 上下左右,上下左右 nSource:0间隔1变压器 regenerate重新生成标志 saveToModel:生成到模型或map
void clearCompoDir(QMap<QString,DiagramEditorRouteInfo>&,QMap<QString,DiagramEditorComponentInfo>&,int nSource); //清空component中的dir(updateTarget前调用)
QList<DiagramEditorComponentInfo> getRouteItemInfoList(QMap<QString,DiagramEditorComponentInfo>,QMap<QString,DiagramEditorRouteInfo>); //返回线路中包含的设备信息列表
private:
void bulidAndLinkComponent(QList<DiagramEditorComponentInfo>,QMap<QString,DiagramEditorComponentInfo>); //生成并连接线路上的设备 lstmapComponents(从map中获取正确数据)
//DiagramEditorComponentInfo getCompoDataFromName(const QString&,QMap<QString,DiagramEditorComponentInfo>); //根据名称获取数据
QList<DiagramEditorComponentInfo> getRouteItemInfoList(QMap<QString,DiagramEditorComponentInfo>,QMap<QString,DiagramEditorRouteInfo>); //返回线路中包含的设备信息列表
private:
QMap<QUuid,GraphicsBaseModelItem*> _tempItem; //临时预览对象
QMap<QUuid,GraphicsBaseModelItem*> _previewItem; //预览对象

View File

@ -29,6 +29,7 @@ class BayProperty;
class BayManagerDlg;
class ModelProperty;
struct itemPageInfo;
class EditBaseItem;
class FixedPortsModel : public BaseModel, public Serializable
{
@ -42,7 +43,7 @@ public:
QVector<ModelProperty*> allConnectionProperty();
QMap<QUuid,GraphicsProjectModelItem*>& allItems();
bool addNodeItem(QUuid uuid,GraphicsProjectModelItem*);
void addNodeItem(QUuid id,QPointF pos,double width = 0,double height = 0);
void addNodeItem(QUuid id,QPointF pos,double width = 0,double height = 0,double rotate = 0);
GraphicsProjectModelItem* nodeItem(QUuid uuid);
BaseProperty* addNodeData(QUuid id,int type,QString name,QString modelName); //对应component数据一个data可对应多个itemid,类型,名称,工程模名)
void loadNodeDataFromDataBase(); //从数据库加载数据
@ -78,17 +79,18 @@ public:
void showProjectModelSettingDlg(GraphicsBaseModelItem*); //在基模拓扑图上打开工程模设置对话框
void generateProjectModel(const QString&,QList<GraphicsBaseModelItem*>,QList<GraphicsNonStandardItem*>); //由基模生成工程模
void addProjectItemByBaseData(DrawingPanel*,GraphicsBaseModelItem*,BaseProperty*); //从基模item生成工程模item
void onWizardFinished(QMap<QUuid,GraphicsBaseModelItem*> mapItem,QList<EditBaseItem*> mapBay); //editor结束生成基模
/*************************间隔*****************************/
void addBayItem(QUuid);
bool addBayItem(QUuid,ElectricBayItem*);
void addBayItem(QUuid,ModelFunctionType = ModelFunctionType::ProjectModel);
bool addBayItem(QUuid,ElectricBayItem*,ModelFunctionType = ModelFunctionType::ProjectModel);
void addItemsToBay(QList<GraphicsBaseItem*>,ElectricBayItem*); //将对象添加到间隔
BayProperty* addBayData(QUuid uuid);
BayProperty* addBayData(QUuid uuid,ModelFunctionType = ModelFunctionType::ProjectModel);
QMap<QUuid,ElectricBayItem*>& allBayItem(); //返回所有间隔对象
BayProperty* generateBayData(BayProperty*,QList<BaseProperty*>); //生成新间隔数据(间隔数据结构相同)<baseBay,projectData>
QList<QUuid> getCorrespondId(QList<QUuid>,QList<BaseProperty*>); //获取基模id对应的工程模id
QRectF calculateItemsBoundingRect(QList<GraphicsBaseItem*> items); //返回包含所有item的rect
void addBayByData(BayProperty*); //基模bay生成工程模bay
void addBayByData(BayProperty*,ModelFunctionType = ModelFunctionType::ProjectModel); //data生成bay
void addTestData(); //生成测试基模
QJsonObject turnListToJson(QList<QUuid> lst,QString sInerTag,QString sOutTag); //将list转换为QJsonObject,<lst,内部标签,外部标签>
@ -109,10 +111,12 @@ public Q_SLOTS:
void onSignal_openBayManager();
private:
void addPortsToItem_json(PortState,QJsonArray,GraphicsProjectModelItem*); //将json格式的port添加到item
void autoSetModelName(GraphicsBaseModelItem*); //如果此页的工程模已被设置将projectName更新到item
private:
QMap<QUuid,GraphicsProjectModelItem*> _nodeItem; //工程模对象
QMap<QUuid,GraphicsBaseModelItem*> _baseItem; //基模对象
QMap<QUuid,ElectricBayItem*> _baseBayItem; //基模间隔对象
QMap<QUuid,ElectricBayItem*> _bayItem; //间隔对象
QString _pageName;

View File

@ -82,6 +82,25 @@ void BayManagerContentDlg::updateByProperty()
ui->tw_zhuangTai->setRowCount(0);
ui->tw_qiTa->setRowCount(0);
ui->le_index->setText(_pData->uuid().toString());
ui->le_type->setText(_pData->getType());
QStringList lstFrom;
for(auto uid:_pData->getLstFrom()){
lstFrom.append(uid.toString());
}
ui->le_from->setText(lstFrom.join(" "));
QStringList lstTo;
for(auto uid:_pData->getLstTo()){
lstTo.append(uid.toString());
}
ui->le_to->setText(lstTo.join(" "));
ui->le_voltage->setText(QString::number(_pData->getVoltage()));
ui->le_fla->setText(QString::number(_pData->getFla()));
ui->le_capacity->setText(QString::number(_pData->getCapacity()));
QList<BaseProperty*> lstPro;
QList<QUuid> lstId = _pData->getLstComponent();
QList<QUuid> lstProtectId = _pData->getLstProtect(); //综合保护

View File

@ -348,21 +348,6 @@ void DiagramCavas::removePanel(PowerEntity* pEntity)
}
}
void DiagramCavas::autoSetModelName(GraphicsBaseModelItem* pItem)
{
ModelProperty* p = pItem->getProperty();
BaseModelProperty* pro = dynamic_cast<BaseModelProperty*>(p);
if(pro){
QString sMeta = pro->metaModelName();
QString sModel = sMeta+"_"+_curPage;
bool exist = ProjectModelManager::instance().getData()[sMeta].contains(sModel);
if(exist){
pro->setModelName(sModel);
pro->getModelProperty().modelSetting.modelName = sModel;
}
}
}
void DiagramCavas::onCreateTestBaseModelDiagram()
{
PowerEntity* pEntity;
@ -415,7 +400,7 @@ void DiagramCavas::onSignal_addEditWizard(QString name)
_pEditorWizard->show();
}
void DiagramCavas::onSignal_wizardFinished(QString sName,QMap<QUuid,GraphicsBaseModelItem*> mapItem)
void DiagramCavas::onSignal_wizardFinished(QString sName,QMap<QUuid,GraphicsBaseModelItem*> mapItem,QList<EditBaseItem*> mapBay)
{
PowerEntity* pEntity;
QUuid id = QUuid::createUuid();
@ -427,60 +412,19 @@ void DiagramCavas::onSignal_wizardFinished(QString sName,QMap<QUuid,GraphicsBase
onSignal_addDrawingPanel(pEntity,DM_baseModel);
DrawingPanel* pPanel = getPanel(pEntity->name());
TopologyManager::instance().cloneEditorToBase(); //拷贝拓扑结构
QMap<QUuid,DiagramEditorItemProperty*> mapEditor = BasePropertyManager::instance().getEditorData();
for(auto& pro:mapEditor){
if(BasePropertyManager::instance().findBaseEntityData(pro->uuid()) == nullptr){ //拷贝editor数据到basemodel中
auto pPro = pPanel->getModelController()->addBaseNodeData(pro->uuid(),pro->type(),pro->name(),pro->metaModelName(),pro->getBlock());
pPro->setConnection(pro->getConnection());
pPro->setGraphicsType(pro->graphicsType());
auto pModel = pPanel->getModelController();
if(pModel){
pModel->onWizardFinished(mapItem,mapBay);
}
}
//pPanel->getModelController()->addTestData();
for(auto pItem:mapItem){
auto cloneItem = pItem->clone();
BaseModelProperty* pPro = BasePropertyManager::instance().findBaseEntityData(cloneItem->itemId());
if(pPro){
cloneItem->setProperty(pPro);
pPanel->getScene()->addItem(cloneItem);
cloneItem->setPos(pItem->pos());
pPanel->getModelController()->addBaseItem(cloneItem->itemId(),cloneItem);
pPro->setDataChanged(true);
autoSetModelName(cloneItem);
if(pPro->type() != 8){
PowerEntity* pEntity = TopologyManager::instance().findEntity(pPro->uuid().toString(),ModelFunctionType::BaseModel);
if(pEntity)
cloneItem->setEntity(pEntity);
}
else
{
}
}
}
QList<QGraphicsItem*> items = pPanel->getScene()->items();
if (items.isEmpty()) {
return; // 没有 items 时返回
}
// 计算所有 items 的联合包围盒
QRectF totalBoundingRect;
foreach (QGraphicsItem *item, items) {
totalBoundingRect |= item->sceneBoundingRect();
}
// 计算中心点
QPointF center = totalBoundingRect.center();
pPanel->getView()->centerOn(center);
}
}
/*******************bay************************/
void DiagramCavas::onSignl_openCurrentBay()
{
QWidget* pWindow= currentSubWindow()->widget();
if(pWindow == nullptr){
QMessageBox::information(NULL, QString("提示"), QString::fromWCharArray(L"当前无打开的工程模"));
}
DrawingPanel* pPanel = dynamic_cast<DrawingPanel*>(pWindow);
if(pPanel)
{

View File

@ -373,7 +373,11 @@ void EditPanel::showConfirmDlg()
connect(_confirmEditor,&ConfirmEditorDlg::onConfirmEditor,this,[&](QString sAuthor,QString sTime){
auto pCavas = _pModel->getCavas();
if(pCavas){
pCavas->onSignal_wizardFinished(_projectName,_pModel->getPreviewItem());
//QList<DiagramEditorBayBlock*> lstBocks;
QList<EditBaseItem*> pBays = getBlockItems(EditorItemType::bay);
pCavas->onSignal_wizardFinished(_projectName,_pModel->getPreviewItem(),pBays);
}
});
}

View File

@ -193,6 +193,7 @@ QJsonObject DrawingPanel::getDiagramInfo() const
node["y"] = iter.value().pos.y();
node["width"] = iter.value().dWidth;
node["height"] = iter.value().dHeight;
node["rotate"] = iter.value().dRotate;
arr.append(node);
}
obj["nodes"] = arr;
@ -240,11 +241,12 @@ void DrawingPanel::loadNodes(QJsonObject obj)
double dY = node["y"].toDouble();
double dWidth = node["width"].toDouble();
double dHeight = node["height"].toDouble();
double dRotate = node["rotate"].toDouble();
//componentInfo info =DataBase::GetInstance()->getComponentInfoByUuid(uuid);
if(_pModel)
{
_pModel->addNodeItem(QUuid(uuid)/*,info.type*/,QPointF(dX,dY),dWidth,dHeight);
_pModel->addNodeItem(QUuid(uuid)/*,info.type*/,QPointF(dX,dY),dWidth,dHeight,dRotate);
}
}

View File

@ -557,8 +557,86 @@ void DiagramEditorModel::generatePreview()
}
}
for(auto &lst:baysCompo){
generateOutConnection(lst,2);
for(auto iter = baysCompo.begin();iter != baysCompo.end();++iter){
QMultiMap<int,QUuid> mapId = generateOutConnection(iter.value(),2);
QList<QUuid> lstFrom; //处理进出链接
QList<QUuid> lstTo;
for(auto item:lst){
if(item->getType() == EditorItemType::bay){
auto p = item->getBlockData(); //获取blockitem对应的data
DiagramEditorBayBlock* pBay = dynamic_cast<DiagramEditorBayBlock*>(p.data());
if(pBay){
if(pBay->getName() == iter.key()){ //相同间隔
switch (pBay->getBayType()) {
case BayType::busSectionBay:{
QList<QUuid> values = mapId.values(1);
if (!values.isEmpty()) {
// 第一个值放入lstFrom
lstFrom.append(values.first());
// 如果有第二个值放入lstTo
if (values.size() > 1) {
lstTo.append(values.at(1));
}
}
}
break;
case BayType::busCouplerBay:{
QList<QUuid> values = mapId.values(1);
if (!values.isEmpty()) {
// 第一个值放入lstFrom
lstFrom.append(values.first());
// 如果有第二个值放入lstTo
if (values.size() > 1) {
lstTo.append(values.at(1));
}
}
}
break;
case BayType::ptBay:{
QList<QUuid> values = mapId.values(1);
if (!values.isEmpty()) {
// 第一个值放入lstTo
lstTo.append(values.first());
}
}
break;
case BayType::incomingBay:{
for (auto it = mapId.begin(); it != mapId.end(); ++it) {
if (it.key() == 1) {
lstTo.append(it.value()); // 连接母线,放入 lstTo
} else {
lstFrom.append(it.value()); // 其他,放入 lstFrom
}
}
}
break;
case BayType::outcomingBay:{
for (auto it = mapId.begin(); it != mapId.end(); ++it) {
if (it.key() != 1) {
lstTo.append(it.value()); // 不连接母线,放入 lstTo
} else {
lstFrom.append(it.value()); // 连接母线,放入 lstFrom
}
}
}
break;
default:
break;
}
pBay->getBayInfo().lstFrom = lstFrom;
pBay->getBayInfo().lstTo = lstTo;
}
}
}
}
}
for(auto &map:transCompo){
@ -1015,14 +1093,17 @@ QList<DiagramEditorComponentInfo> DiagramEditorModel::generateItemByInfo(QMap<QS
return lstBind;
}
void DiagramEditorModel::generateOutConnection(QList<DiagramEditorComponentInfo> lstBind,int nTypeTransCon,int nPos)
QMultiMap<int,QUuid> DiagramEditorModel::generateOutConnection(QList<DiagramEditorComponentInfo> lstBind,int nTypeTransCon,int nPos)
{
QMultiMap<int,QUuid> bindId; //返回关联的对象id<类型id>
for(auto& compo:lstBind){ //遍历关联外部的item进行连线
if(compo.nBindType == 1){ //关联的是母线 母线没有数据获取绘制的母线item
for(auto& pItem:_previewItem){
auto pro = pItem->getProperty();
if(pro){
QString sName = pro->name();
QUuid uId = pro->uuid();
int nType = pro->type();
if(sName == compo.sBindObj){
GraphicsBaseModelItem* pSrc = _previewItem.value(compo.uid);
GraphicsBaseModelItem* pTarget = pItem;
@ -1041,6 +1122,7 @@ void DiagramEditorModel::generateOutConnection(QList<DiagramEditorComponentInfo>
if(pLine)
establishConnection(pSrc,pTarget,pLine,ModelFunctionType::EditorModel);
}
bindId.insert(nType,uId);
}
}
}
@ -1050,6 +1132,8 @@ void DiagramEditorModel::generateOutConnection(QList<DiagramEditorComponentInfo>
auto pro = pItem->getProperty();
if(pro){
QString sName = pro->name();
QUuid uId = pro->uuid();
int nType = pro->type();
if(sName == compo.sBindParent){ //判断变压器名
GraphicsBaseModelItem* pSrc = _previewItem.value(compo.uid);
GraphicsBaseModelItem* pTarget = pItem;
@ -1076,11 +1160,13 @@ void DiagramEditorModel::generateOutConnection(QList<DiagramEditorComponentInfo>
establishConnection(pSrc,pTarget,pLine,ModelFunctionType::EditorModel,nTypeTransCon,nPos);
}
}
bindId.insert(nType,uId);
}
}
}
}
}
return bindId;
}
void DiagramEditorModel::clearCompoDir(QMap<QString,DiagramEditorRouteInfo>& data,QMap<QString,DiagramEditorComponentInfo>& compos,int nSource)

View File

@ -22,6 +22,9 @@
#include "baseModelItem/electricBaseModelSvgBus.h"
#include "baseModelItem/electricBaseModelLineItem.h"
#include "graphicsItem/electricBayItem.h"
#include "diagramEditor/diagramEditorBaseBlock.h"
#include "graphicsItem/electricBayItem.h"
#include "diagramEditor/editItems.h"
#include "graphicsItem/itemPort.h"
#include "designerScene.h"
#include "dataBase.h"
@ -83,6 +86,7 @@ QMap<QUuid,itemPageInfo> FixedPortsModel::allNodePos() const
info.pos = pItem->scenePos()/*+QPointF(dWidth*0.5,dHeight*0.5)*/;
info.dWidth = dWidth;
info.dHeight = dHeight;
info.dRotate = pItem->rotation();
map.insert(pItem->itemId(),info);
}
}
@ -132,7 +136,7 @@ bool FixedPortsModel::addNodeItem(QUuid uuid,GraphicsProjectModelItem* pItem)
}
}
void FixedPortsModel::addNodeItem(QUuid id/*,int type*/,QPointF pos,double width,double height)
void FixedPortsModel::addNodeItem(QUuid id/*,int type*/,QPointF pos,double width,double height,double rotate)
{
//todo:load图形时必有拓扑实体关联到对应的entity
BaseProperty* pro = nullptr;
@ -535,6 +539,7 @@ void FixedPortsModel::addNodeItem(QUuid id/*,int type*/,QPointF pos,double width
item->setItemId(id);
item->editShape(0, pos);
item->setPos(pos);
item->setRotation(rotate);
//item->setSelected(true);
_scene->addItem(item);
item->addPoint(pos);
@ -773,7 +778,7 @@ void FixedPortsModel::saveNode(int nPageId)
QJsonObject objIns= turnListToJson(pBay->getLstInstruct(),"id","ids");
QJsonObject objEtc= turnListToJson(pBay->getLstEtc(),"id","ids");
DataBase::GetInstance()->insertBay(pBay->uuid(),pBay->name(),pBay->getType(),pBay->getVoltage(),pBay->getFla(),pBay->getCapacity(),"1",pBay->getInService(),0,"1","1","1",QJsonObject(),objFrom,objTo,objProtec,objFalRec,objStatus,objDynSen,objIns,objEtc,pBay->getLstComponent(),QJsonObject());
DataBase::GetInstance()->insertBay(pBay->uuid(),pBay->name(),pBay->tag(),pBay->getType(),pBay->getVoltage(),pBay->getFla(),pBay->getCapacity(),"1",pBay->getInService(),0,"1","1","1",QJsonObject(),objFrom,objTo,objProtec,objFalRec,objStatus,objDynSen,objIns,objEtc,pBay->getLstComponent(),QJsonObject());
}
else{
QJsonObject objFrom = turnListToJson(pBay->getLstFrom(),"id","ids");
@ -785,7 +790,7 @@ void FixedPortsModel::saveNode(int nPageId)
QJsonObject objIns= turnListToJson(pBay->getLstInstruct(),"id","ids");
QJsonObject objEtc= turnListToJson(pBay->getLstEtc(),"id","ids");
DataBase::GetInstance()->updateBay(pBay->uuid(),pBay->name(),pBay->getVoltage(),pBay->getFla(),pBay->getCapacity(),"",pBay->getInService(),0,QJsonObject(),objFrom,objTo,objProtec,objFalRec,objStatus,objDynSen,objIns,objEtc,pBay->getLstComponent(),QJsonObject());
DataBase::GetInstance()->updateBay(pBay->uuid(),pBay->name(),pBay->tag(),pBay->getVoltage(),pBay->getFla(),pBay->getCapacity(),"",pBay->getInService(),0,QJsonObject(),objFrom,objTo,objProtec,objFalRec,objStatus,objDynSen,objIns,objEtc,pBay->getLstComponent(),QJsonObject());
}
}
}
@ -1037,7 +1042,7 @@ void FixedPortsModel::onSignal_generateDiagram(const QString& sName)
}
QList<GraphicsNonStandardItem*> lstBay;
for(auto& item:_bayItem)
for(auto& item:_baseBayItem)
{
lstBay.append(item);
}
@ -1081,6 +1086,22 @@ void FixedPortsModel::addPortsToItem_json(PortState sta,QJsonArray jArr,Graphics
}
}
void FixedPortsModel::autoSetModelName(GraphicsBaseModelItem* pItem)
{
ModelProperty* p = pItem->getProperty();
BaseModelProperty* pro = dynamic_cast<BaseModelProperty*>(p);
if(pro){
QString sMeta = pro->metaModelName();
QString sModel = sMeta+"_"+_pageName;
bool exist = ProjectModelManager::instance().getData()[sMeta].contains(sModel);
if(exist){
pro->setModelName(sModel);
pro->getModelProperty().modelSetting.modelName = sModel;
}
}
}
QWidget* FixedPortsModel::getTopWidget()
{
return dynamic_cast<QWidget*>(_widget);
@ -1378,6 +1399,140 @@ void FixedPortsModel::generateProjectModel(const QString& sPageName,QList<Graphi
}
}
void FixedPortsModel::onWizardFinished(QMap<QUuid,GraphicsBaseModelItem*> mapItem,QList<EditBaseItem*> mapBay)
{
QMap<QUuid,DiagramEditorItemProperty*> mapEditor = BasePropertyManager::instance().getEditorData();
for(auto& pro:mapEditor){
if(BasePropertyManager::instance().findBaseEntityData(pro->uuid()) == nullptr){ //拷贝editor数据到basemodel中
auto pPro = _widget->getModelController()->addBaseNodeData(pro->uuid(),pro->type(),pro->name(),pro->metaModelName(),pro->getBlock());
pPro->setConnection(pro->getConnection());
pPro->setGraphicsType(pro->graphicsType());
}
}
//pPanel->getModelController()->addTestData();
for(auto pItem:mapItem){
auto cloneItem = pItem->clone();
BaseModelProperty* pPro = BasePropertyManager::instance().findBaseEntityData(cloneItem->itemId());
if(pPro){
cloneItem->setProperty(pPro);
_scene->addItem(cloneItem);
cloneItem->setPos(pItem->pos());
addBaseItem(cloneItem->itemId(),cloneItem);
pPro->setDataChanged(true);
autoSetModelName(cloneItem);
if(pPro->type() != 8){
PowerEntity* pEntity = TopologyManager::instance().findEntity(pPro->uuid().toString(),ModelFunctionType::BaseModel);
if(pEntity)
cloneItem->setEntity(pEntity);
}
else
{
}
}
}
QList<QGraphicsItem*> items = _scene->items();
if (items.isEmpty()) {
return; // 没有 items 时返回
}
// 计算所有 items 的联合包围盒
QRectF totalBoundingRect;
foreach (QGraphicsItem *item, items) {
totalBoundingRect |= item->sceneBoundingRect();
}
// 计算中心点
QPointF center = totalBoundingRect.center();
//_widget->getView()->centerOn(center);
//**************间隔*************
for(auto item:mapBay){
auto p = item->getBlockData(); //获取blockitem对应的data
DiagramEditorBayBlock* pBay = dynamic_cast<DiagramEditorBayBlock*>(p.data());
if(pBay){
QString sBay = pBay->getName();
auto bayInfo = pBay->getBayInfo();
auto mapRoute = bayInfo.mapRoute;
auto mapCompo = bayInfo.mapComponent;
QList<DiagramEditorComponentInfo> lstInfo;
for(auto& route:mapRoute){ //获取路线中使用的设备
for(auto& compo:route.lstCompo){
auto info = mapCompo.value(compo.sName);
bool exist = false;
for(auto& inf:lstInfo){
if(inf == info){
exist = true;
break;
}
}
if(!exist){
lstInfo.append(info);
}
}
}
QList<GraphicsBaseItem*> lst;
for(auto &inf:lstInfo){
if(_baseItem.contains(inf.uid))
lst.append(_baseItem.value(inf.uid));
}
QRectF rec = calculateItemsBoundingRect(lst);
ElectricBayItem* pNew = new ElectricBayItem(rec);
pNew->setItemType(GIT_bay);
pNew->setText(sBay);
QString sType;
switch (pBay->getBayType()) {
case BayType::busSectionBay:
sType = QString("分段间隔");
break;
case BayType::busCouplerBay:
sType = QString("母联间隔");
break;
case BayType::ptBay:
sType = QString("PT间隔");
break;
case BayType::incomingBay:
sType = QString("进线间隔");
break;
case BayType::outcomingBay:
sType = QString("出线间隔");
break;
case BayType::compensationBay:
sType = QString("无功补偿间隔");
break;
case BayType::bypassBay:
sType = QString("旁路间隔");
break;
default:
break;
}
QUuid bayId = pBay->getId();
BayProperty* pBayData = addBayData(bayId,ModelFunctionType::BaseModel);
pNew->setProperty(pBayData);
pBayData->setName(sBay);
pBayData->setTag(sBay);
pBayData->setType(sType);
pBayData->setLstFrom(pBay->getBayInfo().lstFrom);
pBayData->setLstTo(pBay->getBayInfo().lstTo);
for(auto &info:lstInfo){
pBayData->getLstComponent().append(info.uid);
}
addBayItem(bayId,pNew,ModelFunctionType::BaseModel);
//pModel->addItemsToBay(lst,pNew);
_scene->addItem(pNew);
}
}
}
void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBaseModelItem* pItem,BaseProperty* pPro)
{
BaseModelProperty* pBase = dynamic_cast<BaseModelProperty*>(pItem->getProperty());
@ -1810,8 +1965,21 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase
}
}
void FixedPortsModel::addBayItem(QUuid id)
void FixedPortsModel::addBayItem(QUuid id,ModelFunctionType tpe)
{
if(tpe == ModelFunctionType::BaseModel){
QMap<QUuid,BayProperty*> mapData = BasePropertyManager::instance().getBaseBayData(); //加载的图形必定关联component(todo:完善判断条件,如判断拓扑节点)
if(mapData.contains(id))
{
BayProperty* pro = mapData.value(id);
if(pro)
{
addBayByData(pro,tpe);
}
}
}
else if(tpe == ModelFunctionType::ProjectModel)
{
QMap<QUuid,BayProperty*> mapData = BasePropertyManager::instance().getBayData(); //加载的图形必定关联component(todo:完善判断条件,如判断拓扑节点)
if(mapData.contains(id))
{
@ -1821,10 +1989,22 @@ void FixedPortsModel::addBayItem(QUuid id)
addBayByData(pro);
}
}
}
}
bool FixedPortsModel::addBayItem(QUuid id,ElectricBayItem* pBay)
bool FixedPortsModel::addBayItem(QUuid id,ElectricBayItem* pBay,ModelFunctionType typ)
{
if(typ == ModelFunctionType::BaseModel){
if(_baseBayItem.contains(id))
return false;
else
{
_baseBayItem.insert(id,pBay);
return true;
}
}
else if(typ == ModelFunctionType::ProjectModel){
if(_bayItem.contains(id))
return false;
else
@ -1832,6 +2012,8 @@ bool FixedPortsModel::addBayItem(QUuid id,ElectricBayItem* pBay)
_bayItem.insert(id,pBay);
return true;
}
}
return false;
}
void FixedPortsModel::addItemsToBay(QList<GraphicsBaseItem*> lstItem,ElectricBayItem* pBay)
@ -1852,8 +2034,23 @@ void FixedPortsModel::addItemsToBay(QList<GraphicsBaseItem*> lstItem,ElectricBay
}
}
BayProperty* FixedPortsModel::addBayData(QUuid uuid)
BayProperty* FixedPortsModel::addBayData(QUuid uuid,ModelFunctionType typ)
{
if(typ == ModelFunctionType::BaseModel){
BayProperty* pData = BasePropertyManager::instance().findBaseBayData(uuid); //已存在不不创建
if(pData != nullptr)
return pData;
BayProperty* item = new BayProperty();
if(item)
{
item->setUuid(uuid);
BasePropertyManager::instance().insertBaseBayData(uuid,item);
}
return item;
}
else if(typ == ModelFunctionType::ProjectModel){
BayProperty* pData = BasePropertyManager::instance().findBayData(uuid); //已存在不不创建
if(pData != nullptr)
return pData;
@ -1866,6 +2063,8 @@ BayProperty* FixedPortsModel::addBayData(QUuid uuid)
BasePropertyManager::instance().insertBayData(uuid,item);
}
return item;
}
return nullptr;
}
QMap<QUuid,ElectricBayItem*>& FixedPortsModel::allBayItem()
@ -1875,8 +2074,7 @@ QMap<QUuid,ElectricBayItem*>& FixedPortsModel::allBayItem()
BayProperty* FixedPortsModel::generateBayData(BayProperty* pData,QList<BaseProperty*> lst)
{
QUuid id = QUuid::createUuid();
BayProperty* p = addBayData(id);
BayProperty* p = addBayData(pData->uuid());
p->setTag(pData->tag());
p->setName(pData->name());
p->setType(pData->getType());
@ -1957,8 +2155,26 @@ QRectF FixedPortsModel::calculateItemsBoundingRect(QList<GraphicsBaseItem*> item
return boundingRect.adjusted(-10,-10,10,10);
}
void FixedPortsModel::addBayByData(BayProperty* pData)
void FixedPortsModel::addBayByData(BayProperty* pData,ModelFunctionType typ)
{
if(typ == ModelFunctionType::BaseModel){
QList<GraphicsBaseItem*> items;
QList<QUuid> lstCompo = pData->getLstComponent();
for(auto& id:lstCompo){
if(_baseItem.contains(id)){
items.append(_baseItem.value(id));
}
}
QRectF rec = calculateItemsBoundingRect(items);
auto pBay = new ElectricBayItem(rec);
pBay->setItemType(GIT_bay);
pBay->setProperty(pData);
pBay->setText(pData->name());
addBayItem(pData->uuid(),pBay,typ);
getScene()->addItem(pBay);
}
else if(typ == ModelFunctionType::ProjectModel){
QList<GraphicsBaseItem*> items;
QList<QUuid> lstCompo = pData->getLstComponent();
for(auto& id:lstCompo){
@ -1974,6 +2190,7 @@ void FixedPortsModel::addBayByData(BayProperty* pData)
pBay->setText(pData->name());
addBayItem(pData->uuid(),pBay);
getScene()->addItem(pBay);
}
}
void FixedPortsModel::addTestData()

View File

@ -7,6 +7,7 @@ ElectricBayItem::ElectricBayItem(const QRectF &rect,QGraphicsItem *parent)
: GraphicsNonStandardItem(parent)
{
m_showRect = rect;
//m_boundingRect = rect;
m_dWidth = rect.width();
m_dHeight = rect.height();
m_font.setPointSize(12);
@ -48,6 +49,7 @@ void ElectricBayItem::updateTextShape()
QFontMetricsF metrics(m_font);
QRectF recText = metrics.boundingRect(m_text);
//_recLabel = recText.translated(g_offsetX,g_offsetY);
recText.moveTo(m_showRect.topLeft()-QPointF(recText.width(),recText.height()));
_recLabel = recText;
shape();
}

View File

@ -32,6 +32,11 @@ public:
void deleteBaseEntityData(QUuid);
QMap<QUuid,BaseModelProperty*> getBaseEntityData() const;
void insertBaseBayData(QUuid,BayProperty*); //基模间隔
BayProperty* findBaseBayData(QUuid);
void deleteBaseBayData(QUuid);
QMap<QUuid,BayProperty*> getBaseBayData() const;
void insertBayData(QUuid,BayProperty*);
BayProperty* findBayData(QUuid);
void deleteBayData(QUuid);
@ -54,6 +59,7 @@ public slots:
private:
QMap<QUuid,BaseProperty*> m_entityData; //工程模实例化元件的唯一数据
QMap<QUuid,BaseModelProperty*> m_baseEntityData; //基模实例元件数据
QMap<QUuid,BayProperty*> m_baseBayData; //基模间隔数据
QMap<QUuid,BayProperty*> m_bayData; //间隔数据
QMap<QUuid,DiagramEditorItemProperty*> m_editorTempData; //编辑时临时预览对象
QMap<QUuid,DiagramEditorItemProperty*> m_editorData; //编辑时预览对象

View File

@ -61,8 +61,8 @@ public:
QJsonObject getPageContextByName(QString name);
QList<pageInfo> getAllPage();
/*********************************************************************************/
bool insertBay(QUuid uuid,QString name,QString type,double unom,double fla,double capacity,QString description,bool inService,int nState,QString grid,QString zone,QString station,QJsonObject business,QJsonObject fromUuid,QJsonObject toUuid,QJsonObject protect,QJsonObject faultRec,QJsonObject status,QJsonObject dynSense,QJsonObject instruct,QJsonObject etc,QList<QUuid> components,QJsonObject context);
bool updateBay(QUuid uuid,QString name,double unom,double fla,double capacity,QString description,bool inService,int nState,QJsonObject business,QJsonObject fromUuid,QJsonObject toUuid,QJsonObject protect,QJsonObject faultRec,QJsonObject status,QJsonObject dynSense,QJsonObject instruct,QJsonObject etc,QList<QUuid> components,QJsonObject context);
bool insertBay(QUuid uuid,QString name,QString tag,QString type,double unom,double fla,double capacity,QString description,bool inService,int nState,QString grid,QString zone,QString station,QJsonObject business,QJsonObject fromUuid,QJsonObject toUuid,QJsonObject protect,QJsonObject faultRec,QJsonObject status,QJsonObject dynSense,QJsonObject instruct,QJsonObject etc,QList<QUuid> components,QJsonObject context);
bool updateBay(QUuid uuid,QString name,QString tag,double unom,double fla,double capacity,QString description,bool inService,int nState,QJsonObject business,QJsonObject fromUuid,QJsonObject toUuid,QJsonObject protect,QJsonObject faultRec,QJsonObject status,QJsonObject dynSense,QJsonObject instruct,QJsonObject etc,QList<QUuid> components,QJsonObject context);
bayInfo getBay(QUuid uuid);
QList<bayInfo> getAllBay();
bool ifBayExist(QUuid uuid);

View File

@ -71,6 +71,30 @@ QMap<QUuid,BaseModelProperty*> BasePropertyManager::getBaseEntityData() const
return m_baseEntityData;
}
/*****************************基模间隔数据*******************************/
void BasePropertyManager::insertBaseBayData(QUuid id,BayProperty* p)
{
if(!m_baseBayData.contains(id))
m_baseBayData.insert(id,p);
}
BayProperty* BasePropertyManager::findBaseBayData(QUuid id)
{
return m_baseBayData.value(id,nullptr);
}
void BasePropertyManager::deleteBaseBayData(QUuid id)
{
BayProperty* pData = m_baseBayData.value(id,nullptr);
if(pData)
delete pData;
}
QMap<QUuid,BayProperty*> BasePropertyManager::getBaseBayData() const
{
return m_baseBayData;
}
/*****************************间隔数据*******************************/
void BasePropertyManager::insertBayData(QUuid id,BayProperty* p)
{

View File

@ -1057,7 +1057,7 @@ bool DataBase::deleteComponentById(int id)
}
/*****************************************************************************/
bool DataBase::insertBay(QUuid uuid,QString name,QString type,double unom,double fla,double capacity,QString description,bool inService,int nState,QString grid,QString zone,
bool DataBase::insertBay(QUuid uuid,QString name,QString tag,QString type,double unom,double fla,double capacity,QString description,bool inService,int nState,QString grid,QString zone,
QString station,QJsonObject business,QJsonObject fromUuid,QJsonObject toUuid,QJsonObject protect,QJsonObject faultRec,QJsonObject status,QJsonObject dynSense,
QJsonObject instruct,QJsonObject etc,QList<QUuid> components,QJsonObject context)
{
@ -1091,7 +1091,7 @@ bool DataBase::insertBay(QUuid uuid,QString name,QString type,double unom,double
QJsonDocument contextDoc(etc);
QString strContext = contextDoc.toJson(QJsonDocument::Compact);
QString strSQL = "INSERT INTO bay(bay_uuid, name, type, unom, fla, capacity, description, in_service, state, grid, zone, station, business, from_uuids, to_uuids, dev_protect, dev_fault_record, dev_status, dev_dyn_sense, dev_instruct, dev_etc, components, context) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
QString strSQL = "INSERT INTO bay(bay_uuid, name, tag, type, unom, fla, capacity, description, in_service, state, grid, zone, station, business, from_uuids, to_uuids, dev_protect, dev_fault_record, dev_status, dev_dyn_sense, dev_instruct, dev_etc, components, context) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
QStringList uuidStrings;
for (const QUuid &uuid : components) {
@ -1103,6 +1103,7 @@ bool DataBase::insertBay(QUuid uuid,QString name,QString type,double unom,double
QVariantList params;
params.append(uuid.toString());
params.append(name);
params.append(tag);
params.append(type);
params.append(unom);
params.append(fla);
@ -1137,7 +1138,7 @@ bool DataBase::insertBay(QUuid uuid,QString name,QString type,double unom,double
}
}
bool DataBase::updateBay(QUuid uuid,QString name,double unom,double fla,double capacity,QString description,bool inService,int nState,QJsonObject business,
bool DataBase::updateBay(QUuid uuid,QString name,QString tag,double unom,double fla,double capacity,QString description,bool inService,int nState,QJsonObject business,
QJsonObject fromUuid,QJsonObject toUuid,QJsonObject protect,QJsonObject faultRec,QJsonObject status,QJsonObject dynSense,QJsonObject instruct,
QJsonObject etc,QList<QUuid> components,QJsonObject context)
{
@ -1178,9 +1179,10 @@ bool DataBase::updateBay(QUuid uuid,QString name,double unom,double fla,double c
}
QString arrayUuid = "{" + uuidStrings.join(",") + "}";
QString strSQL = "UPDATE bay SET name = ?,unom = ?,fla = ?,capacity = ?,description = ?,in_service = ?, state = ?, business = ?,from_uuids = ?,to_uuids = ?,dev_protect = ?,dev_fault_record = ?, dev_status = ?,dev_dyn_sense = ?,dev_instruct = ?,dev_etc = ?,components = ?,context = ? WHERE bay_uuid = ?";
QString strSQL = "UPDATE bay SET name = ?,tag = ?,unom = ?,fla = ?,capacity = ?,description = ?,in_service = ?, state = ?, business = ?,from_uuids = ?,to_uuids = ?,dev_protect = ?,dev_fault_record = ?, dev_status = ?,dev_dyn_sense = ?,dev_instruct = ?,dev_etc = ?,components = ?,context = ? WHERE bay_uuid = ?";
QVariantList params;
params.append(name);
params.append(tag);
params.append(unom);
params.append(fla);
params.append(capacity);
@ -1215,7 +1217,7 @@ bool DataBase::updateBay(QUuid uuid,QString name,double unom,double fla,double c
bayInfo DataBase::getBay(QUuid uuid)
{
bayInfo info;
QString strSQL = "SELECT bay_uuid, name, type, unom, fla, capacity, description, in_service, state, grid, zone, station, business, from_uuids, to_uuids, dev_protect, dev_fault_record, dev_status, dev_dyn_sense, dev_instruct, dev_etc, components, context FROM bay WHERE bay_uuid = ?";
QString strSQL = "SELECT bay_uuid, name, tag, type, unom, fla, capacity, description, in_service, state, grid, zone, station, business, from_uuids, to_uuids, dev_protect, dev_fault_record, dev_status, dev_dyn_sense, dev_instruct, dev_etc, components, context FROM bay WHERE bay_uuid = ?";
QVariantList params;
params.append(uuid);
@ -1226,37 +1228,38 @@ bayInfo DataBase::getBay(QUuid uuid)
{
info.uuid = QUuid(query.value(0).toString());
info.name = query.value(1).toString();
info.type = query.value(2).toString();
info.unom = query.value(3).toDouble();
info.fla = query.value(4).toDouble();
info.capacity = query.value(5).toDouble();
info.description = query.value(6).toString();
info.inService = query.value(7).toBool();
info.nState = query.value(8).toInt();
info.grid = query.value(9).toString();
info.zone = query.value(10).toString();
info.station = query.value(11).toString();
QString strBusi = query.value(12).toString();
info.tag = query.value(2).toString();
info.type = query.value(3).toString();
info.unom = query.value(4).toDouble();
info.fla = query.value(5).toDouble();
info.capacity = query.value(6).toDouble();
info.description = query.value(7).toString();
info.inService = query.value(8).toBool();
info.nState = query.value(9).toInt();
info.grid = query.value(10).toString();
info.zone = query.value(11).toString();
info.station = query.value(12).toString();
QString strBusi = query.value(13).toString();
info.business = QstringToJson(strBusi);
QString strFrom = query.value(13).toString();
QString strFrom = query.value(14).toString();
info.fromUuid = QstringToJson(strFrom);
QString strTo = query.value(14).toString();
QString strTo = query.value(15).toString();
info.toUuid = QstringToJson(strTo);
QString strProtect = query.value(15).toString();
QString strProtect = query.value(16).toString();
info.protect = QstringToJson(strProtect);
QString strFaultRec= query.value(16).toString();
QString strFaultRec= query.value(17).toString();
info.faultRec = QstringToJson(strFaultRec);
QString strStatus= query.value(17).toString();
QString strStatus= query.value(18).toString();
info.status = QstringToJson(strStatus);
QString strDynSense= query.value(18).toString();
QString strDynSense= query.value(19).toString();
info.dynSense = QstringToJson(strDynSense);
QString strInstructe= query.value(19).toString();
QString strInstructe= query.value(20).toString();
info.instruct = QstringToJson(strInstructe);
QString strEtc= query.value(20).toString();
QString strEtc= query.value(21).toString();
info.etc = QstringToJson(strEtc);
QString rawData = query.value(21).toString();
QString rawData = query.value(22).toString();
info.components = parseUuidArray(rawData);
QString strContext= query.value(22).toString();
QString strContext= query.value(23).toString();
info.context = QstringToJson(strContext);
}
query.clear();
@ -1271,7 +1274,7 @@ bayInfo DataBase::getBay(QUuid uuid)
QList<bayInfo> DataBase::getAllBay()
{
QList<bayInfo> lstInfo;
QString strSQL = "SELECT bay_uuid, name, type, unom, fla, capacity, description, in_service, state, grid, zone, station, business, from_uuids, to_uuids, dev_protect, dev_fault_record, dev_status, dev_dyn_sense, dev_instruct, dev_etc, components, context FROM bay";
QString strSQL = "SELECT bay_uuid, name, tag, type, unom, fla, capacity, description, in_service, state, grid, zone, station, business, from_uuids, to_uuids, dev_protect, dev_fault_record, dev_status, dev_dyn_sense, dev_instruct, dev_etc, components, context FROM bay";
try
{
@ -1281,37 +1284,38 @@ QList<bayInfo> DataBase::getAllBay()
bayInfo info;
info.uuid = QUuid(query.value(0).toString());
info.name = query.value(1).toString();
info.type = query.value(2).toString();
info.unom = query.value(3).toDouble();
info.fla = query.value(4).toDouble();
info.capacity = query.value(5).toDouble();
info.description = query.value(6).toString();
info.inService = query.value(7).toBool();
info.nState = query.value(8).toInt();
info.grid = query.value(9).toString();
info.zone = query.value(10).toString();
info.station = query.value(11).toString();
QString strBusi = query.value(12).toString();
info.tag = query.value(2).toString();
info.type = query.value(3).toString();
info.unom = query.value(4).toDouble();
info.fla = query.value(5).toDouble();
info.capacity = query.value(6).toDouble();
info.description = query.value(7).toString();
info.inService = query.value(8).toBool();
info.nState = query.value(9).toInt();
info.grid = query.value(10).toString();
info.zone = query.value(11).toString();
info.station = query.value(12).toString();
QString strBusi = query.value(13).toString();
info.business = QstringToJson(strBusi);
QString strFrom = query.value(13).toString();
QString strFrom = query.value(14).toString();
info.fromUuid = QstringToJson(strFrom);
QString strTo = query.value(14).toString();
QString strTo = query.value(15).toString();
info.toUuid = QstringToJson(strTo);
QString strProtect = query.value(15).toString();
QString strProtect = query.value(16).toString();
info.protect = QstringToJson(strProtect);
QString strFaultRec= query.value(16).toString();
QString strFaultRec= query.value(17).toString();
info.faultRec = QstringToJson(strFaultRec);
QString strStatus= query.value(17).toString();
QString strStatus= query.value(18).toString();
info.status = QstringToJson(strStatus);
QString strDynSense= query.value(18).toString();
QString strDynSense= query.value(19).toString();
info.dynSense = QstringToJson(strDynSense);
QString strInstructe= query.value(19).toString();
QString strInstructe= query.value(20).toString();
info.instruct = QstringToJson(strInstructe);
QString strEtc= query.value(20).toString();
QString strEtc= query.value(21).toString();
info.etc = QstringToJson(strEtc);
QString rawData = query.value(21).toString();
QString rawData = query.value(22).toString();
info.components = parseUuidArray(rawData);
QString strContext= query.value(22).toString();
QString strContext= query.value(23).toString();
info.context = QstringToJson(strContext);
lstInfo.append(info);
}