add save editor sturcture

This commit is contained in:
baiYue 2025-10-24 21:11:07 +08:00
parent 52e2efdfcf
commit 1edfb1cb3d
28 changed files with 853 additions and 71 deletions

View File

@ -12,7 +12,7 @@ find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core Gui Widgets Sql Xml REQUIRED)
find_package(Qt6 REQUIRED COMPONENTS SvgWidgets)
find_package(Qt6 COMPONENTS Network REQUIRED)
find_package(PostgreSQL REQUIRED)
find_package(PostgreSQL REQUIRED)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
@ -127,7 +127,7 @@ endif()
include_directories(include)
include_directories(common/include)
include_directories(${POSTGRESQL_INCLUDE_DIRS})
include_directories(${PostgreSQL_INCLUDE_DIRS})
target_include_directories(DiagramDesigner PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/include")
target_link_libraries(DiagramDesigner PUBLIC Qt${QT_VERSION_MAJOR}::Core
@ -136,7 +136,8 @@ target_link_libraries(DiagramDesigner PUBLIC Qt${QT_VERSION_MAJOR}::Core
target_link_libraries(DiagramDesigner PRIVATE Qt6::SvgWidgets)
target_link_libraries(DiagramDesigner PRIVATE Qt6::Xml)
target_link_libraries(DiagramDesigner PRIVATE Qt6::Network)
target_link_libraries(DiagramDesigner PRIVATE Qt6::Sql ${POSTGRESQL_LIBRARIES})
target_link_libraries(DiagramDesigner PRIVATE Qt6::Sql ${PostgreSQL_LIBRARIES})
message(STATUS "POSTGRESQL_LIBRARIES: ${PostgreSQL_LIBRARIES}")
set_target_properties(DiagramDesigner PROPERTIES
AUTOMOC ON
AUTORCC ON

View File

@ -428,6 +428,15 @@ struct DiagramEditorWizardBusInfo //组态编辑母线信息
int nNum2 = 0; //2母
int connectType = 0; //接线方式1为分段连接
bool bChanged = false; //是否改变
friend QDataStream &operator<<(QDataStream &out, const DiagramEditorWizardBusInfo &data) {
out << data.nIndex << data.dVoltage << data.nLineType << data.nNum1 << data.nNum2 << data.connectType << data.bChanged;
return out;
}
friend QDataStream &operator>>(QDataStream &in, DiagramEditorWizardBusInfo &data) {
in >> data.nIndex >> data.dVoltage >> data.nLineType >> data.nNum1 >> data.nNum2 >> data.connectType >> data.bChanged;
return in;
}
};
enum class TransformerType //变压器类型
@ -500,6 +509,15 @@ struct DiagramEditorComponentInfo //组态设备信息
else
return false;
}
friend QDataStream &operator<<(QDataStream &out, const DiagramEditorComponentInfo &data) {
out << data.nCategory << data.sName << data.nType << data.sBindObj << data.nBindType << data.nBindPara << data.sBindParent << data.sUsedRoute << data.nUsedDirection << data.deltaPos << data.uid << data.nFlag << data.nRotate;
return out;
}
friend QDataStream &operator>>(QDataStream &in, DiagramEditorComponentInfo &data) {
in >> data.nCategory >> data.sName >> data.nType >> data.sBindObj >> data.nBindType >> data.nBindPara >> data.sBindParent >> data.sUsedRoute >> data.nUsedDirection >> data.deltaPos >> data.uid >> data.nFlag >> data.nRotate;
return in;
}
};
inline uint qHash(const DiagramEditorComponentInfo &key, uint seed = 0) {
@ -513,6 +531,15 @@ struct DiagramEditorRouteInfo //间隔中单条线路信息
QList<DiagramEditorComponentInfo> lstCompo;
QList<DiagramEditorComponentInfo> lstOrder; //线路顺序容器(计算用)
QList<DiagramEditorComponentInfo> lstReverse; //逆序容器(计算用)
friend QDataStream &operator<<(QDataStream &out, const DiagramEditorRouteInfo &data) {
out << data.sRouteName << data.bMainRoute << data.lstCompo << data.lstOrder << data.lstReverse;
return out;
}
friend QDataStream &operator>>(QDataStream &in, DiagramEditorRouteInfo &data) {
in >> data.sRouteName >> data.bMainRoute >> data.lstCompo >> data.lstOrder >> data.lstReverse;
return in;
}
};
struct DiagramEditorBayInfo //组态编辑间隔信息
@ -523,6 +550,15 @@ struct DiagramEditorBayInfo //组态编辑间隔信息
QList<QUuid> lstTo; //结束
QMap<QString,DiagramEditorRouteInfo> mapRoute; //线路信息
QMap<QString,DiagramEditorComponentInfo> mapComponent; //设备信息
friend QDataStream &operator<<(QDataStream &out, const DiagramEditorBayInfo &data) {
out << data.name << data.nLayout << data.lstFrom << data.lstTo << data.mapRoute << data.mapComponent;
return out;
}
friend QDataStream &operator>>(QDataStream &in, DiagramEditorBayInfo &data) {
in >> data.name >> data.nLayout >> data.lstFrom >> data.lstTo >> data.mapRoute >> data.mapComponent;
return in;
}
};
struct DiagramEditorTransNeutralInfo //组态编辑变压器中性点信息
@ -531,6 +567,15 @@ struct DiagramEditorTransNeutralInfo //组态编辑变压器中性点信息
int nType = 0; //中性点类型 0高1中2低
QPointF delPoint; //相对变压器偏移量
QMap<QString,DiagramEditorRouteInfo> mapRoute; //中性点对应的线路结构
friend QDataStream &operator<<(QDataStream &out, const DiagramEditorTransNeutralInfo &data) {
out << data.name << data.nType << data.delPoint << data.mapRoute;
return out;
}
friend QDataStream &operator>>(QDataStream &in, DiagramEditorTransNeutralInfo &data) {
in >> data.name >> data.nType >> data.delPoint >> data.mapRoute;
return in;
}
};
struct DiagramEditorTransInfo //组态编辑变压器信息
@ -538,6 +583,15 @@ struct DiagramEditorTransInfo //组态编辑变压器信息
QString name; //变压器名
QMap<int,DiagramEditorTransNeutralInfo> mapNeutral; //中性点结构
QMap<QString,DiagramEditorComponentInfo> mapComponent; //设备信息
friend QDataStream &operator<<(QDataStream &out, const DiagramEditorTransInfo &data) {
out << data.name << data.mapNeutral << data.mapComponent;
return out;
}
friend QDataStream &operator>>(QDataStream &in, DiagramEditorTransInfo &data) {
in >> data.name >> data.mapNeutral >> data.mapComponent;
return in;
}
};
enum class DiagramEditorStructType
@ -551,6 +605,15 @@ struct DiagramEditorConnectType //组态编辑连接信息
{
QString sName;
int nType = 0; //1母线2间隔,3变压器
friend QDataStream &operator<<(QDataStream &out, const DiagramEditorConnectType &data) {
out << data.sName << data.nType;
return out;
}
friend QDataStream &operator>>(QDataStream &in, DiagramEditorConnectType &data) {
in >> data.sName >> data.nType;
return in;
}
};
struct DiagramEditorBriefConnect //组态编辑时连接信息
@ -570,6 +633,15 @@ struct DiagramEditorBriefConnect //组态编辑时连接信息
return false;
}
friend QDataStream &operator<<(QDataStream &out, const DiagramEditorBriefConnect &data) {
out << data.uid << data.con1 << data.con2 << data.nPara;
return out;
}
friend QDataStream &operator>>(QDataStream &in, DiagramEditorBriefConnect &data) {
in >> data.uid >> data.con1 >> data.con2 >> data.nPara;
return in;
}
DiagramEditorConnectType getOpposite(const QString& s){ //获取另一端名称
if(con1.sName == s)
return con2;
@ -579,6 +651,83 @@ struct DiagramEditorBriefConnect //组态编辑时连接信息
}
};
struct DiagramEditorBlockInfo //组态编辑block信息
{
QString sName;
QString sContainerId; //所属的容器id
int nType; //1母线,2间隔,3变压器
int nContainerLevel; //所处容器的层级 0,1,2,3
QUuid uid;
QList<QUuid> _lstCon; //连接信息
QRectF recSize; //当前大小(根据内容确定)
QPointF sceneDelta; //block中心相对位移(计算布局位置
bool bEditState; //详细编辑状态
//bus
float fVoltage; //母线电压
int nBusType; //0无前缀,1:Ⅰ母,2Ⅱ母
int nIndex; //第几段,1A,2B,3C,4D,5E,6F,7G,8H
//bay
BayType nBayType;
DiagramEditorBayInfo bayInfo; //间隔信息
//transformer
TransformerType nTransType;
DiagramEditorTransInfo transInfo;
friend QDataStream &operator<<(QDataStream &out, const DiagramEditorBlockInfo &data) {
out << data.sName << data.sContainerId << data.nType << data.nContainerLevel << data.uid << data._lstCon << data.recSize << data.sceneDelta
<< data.bEditState << data.fVoltage << data.nBusType << data.nIndex << data.nBayType << data.bayInfo << data.nTransType << data.transInfo;
return out;
}
friend QDataStream &operator>>(QDataStream &in, DiagramEditorBlockInfo &data) {
in >> data.sName >> data.sContainerId >> data.nType >> data.nContainerLevel >> data.uid >> data._lstCon >> data.recSize >> data.sceneDelta
>> data.bEditState >> data.fVoltage >> data.nBusType >> data.nIndex >> data.nBayType >> data.bayInfo >> data.nTransType >> data.transInfo;
return in;
}
};
struct DiagramEditorContainerInfo //组态编辑容器信息
{
QString sId;
double dMidUpY; //1母上边界
double dMidDownY; //2母下边界
double dStartX; //起始x
double dStartY; //起始y
double dWidth; //宽度
double dHeight;
double dMaxUpH; //上方最大高度(1母线到上边界)
double dMaxDownH; //下方最大高度(2母线到下边界)
QMap<int,QList<DiagramEditorBlockInfo>> mapBlockInfo;
friend QDataStream &operator<<(QDataStream &out, const DiagramEditorContainerInfo &data) {
out << data.sId << data.dMidUpY << data.dMidDownY << data.dStartX << data.dStartY << data.dWidth << data.dHeight << data.dMaxUpH << data.dMaxDownH << data.mapBlockInfo;
return out;
}
friend QDataStream &operator>>(QDataStream &in, DiagramEditorContainerInfo &data) {
in >> data.sId >> data.dMidUpY >> data.dMidDownY >> data.dStartX >> data.dStartY >> data.dWidth >> data.dHeight >> data.dMaxUpH >> data.dMaxDownH >> data.mapBlockInfo;
return in;
}
};
struct DiagramEditorProjectInfo //editor工程信息
{
QString sName;
QUuid uid;
QMap<int,DiagramEditorWizardBusInfo> mapBus;
QMap<int,QList<DiagramEditorContainerInfo>> mapSturctContainer;
QMap<QUuid,DiagramEditorBriefConnect> mapConnect;
friend QDataStream &operator<<(QDataStream &out, const DiagramEditorProjectInfo &data) {
out << data.sName << data.uid << data.mapBus << data.mapSturctContainer << data.mapConnect;
return out;
}
friend QDataStream &operator>>(QDataStream &in, DiagramEditorProjectInfo &data) {
in >> data.sName >> data.uid >> data.mapBus >> data.mapSturctContainer >> data.mapConnect;
return in;
}
};
//==================组态图使用=====================
enum HandleType
{
@ -765,6 +914,16 @@ struct baseComponentInfo //基模图元数据
QString metaMmodel;
QString projectModel;
};
struct editorProjectInfo //editor工程数据
{
int id = 0;
QUuid uuid;
QString name;
QString tag;
QByteArray context;
};
//==================================================
struct componentInfo //工程模图元数据

View File

@ -257,7 +257,7 @@ target_link_libraries(diagramCavas PUBLIC Qt${QT_VERSION_MAJOR}::Core
target_link_libraries(diagramCavas PRIVATE Qt6::SvgWidgets)
target_link_libraries(diagramCavas PRIVATE Qt6::Xml)
target_link_libraries(diagramCavas PRIVATE Qt6::Network)
target_link_libraries(diagramCavas PRIVATE Qt6::Sql ${POSTGRESQL_LIBRARIES})
target_link_libraries(diagramCavas PRIVATE Qt6::Sql ${PostgreSQL_LIBRARIES})
option(BUILD_SHARED_LIBS "Build as shared library" ON)

View File

@ -25,6 +25,7 @@ public:
~DiagramCavas();
DrawingPanel* getPanel(QString);
EditPanel* getEditPanel(QString);
public:
void initial();
public slots:
@ -33,6 +34,7 @@ public slots:
void onSignal_addPage();
void onSignal_savePage();
void onSignal_loadPage(PowerEntity* p);
void onSignal_loadEdit(const QString&,QUuid);
void runPage(const QString); //运行时
void onSignal_runPage();
void onSignal_deletePage();
@ -52,9 +54,10 @@ public slots:
void onCreateTestBaseModelDiagram(); //生成测试基模图
/******************************生成组态***********************************/
void onSignal_createEditPanel(QString);
void onSignal_createEditPanel(QString,QUuid);
void onSignal_prepareSaveEdit(QString);
EditPanel* onSignal_addEditPanel(QString);
void onSignal_addEditWizard(QString);
void onSignal_addEditWizard(QString,QUuid);
void onSignal_wizardFinished(QString,QMap<QUuid,GraphicsBaseModelItem*>,QList<EditBaseItem*>);
/*********************************间隔**************************************/
void onSignl_openCurrentBay();
@ -62,9 +65,9 @@ private:
void removePanel(PowerEntity*);
private:
QMap<QString,QPair<DrawingPanel*,QMdiSubWindow*>> m_mapDrawPanel;
QMap<QString,QPair<EditPanel*,QMdiSubWindow*>> m_mapEditPanel;
int _pageIndex;
QString _curPage;
DiagramEditorWizard* _pEditorWizard;
};
#endif

View File

@ -33,7 +33,9 @@ public:
virtual QPointF getSceneDelta() {return sceneDelta;}
virtual void setEditState(bool b){bEditState = b;}
virtual bool getEditState(){return bEditState;}
virtual DiagramEditorBlockInfo getBlockInfo(); //返回block中存储的信息
protected:
DiagramEditorStructContainer* _curContainer; //当前所处的容器
QString sName;
int nType; //1母线,2间隔,3变压器
int nContainerLevel; //所处容器的层级 0,1,2,3
@ -41,8 +43,18 @@ protected:
QList<QUuid> _lstCon; //连接信息
QRectF recSize; //当前大小(根据内容确定)
QPointF sceneDelta; //block中心相对位移(计算布局位置
DiagramEditorStructContainer* _curContainer; //当前所处的容器
bool bEditState; //详细编辑状态
//bus
float fVoltage; //母线电压
int nBusType; //0无前缀,1:Ⅰ母,2Ⅱ母
int nIndex; //第几段,1A,2B,3C,4D,5E,6F,7G,8H
//bay
BayType nBayType;
DiagramEditorBayInfo bayInfo; //间隔信息
//transformer
TransformerType nTransType;
DiagramEditorTransInfo transInfo;
};
/***************************划分后的分段bus单元****************************/
@ -59,10 +71,7 @@ public:
virtual void setIndex(int n) {nIndex = n;}
virtual int getIndex() {return nIndex;}
virtual void setBusPro(QString sNa,int nTp,float fVol,int nBT,int nIdx) {sName = sNa;nType = nTp;fVoltage = fVol;nBusType = nBT;nIndex = nIdx;}
protected:
float fVoltage; //母线电压
int nBusType; //0无前缀,1:Ⅰ母,2Ⅱ母
int nIndex; //第几段,1A,2B,3C,4D,5E,6F,7G,8H
};
/***************************bay单元****************************/
@ -76,9 +85,6 @@ public:
virtual BayType getBayType() {return nBayType;}
virtual void setBayInfo(DiagramEditorBayInfo info) {bayInfo = info;}
virtual DiagramEditorBayInfo& getBayInfo(){return bayInfo;}
protected:
BayType nBayType;
DiagramEditorBayInfo bayInfo; //间隔信息
};
/***************************transformer单元****************************/
@ -92,8 +98,5 @@ public:
virtual TransformerType getTransType() {return nTransType;}
virtual void setTransInfo(DiagramEditorTransInfo info) {transInfo = info;}
virtual DiagramEditorTransInfo& getTranInfo() {return transInfo;}
protected:
TransformerType nTransType;
DiagramEditorTransInfo transInfo;
};
#endif

View File

@ -36,9 +36,11 @@ public:
double getMaxUpH() {return dMaxUpH;}
void setMaxDownH(double d){dMaxDownH = d;}
double getMaxDownH() {return dMaxDownH;}
QMap<int,QList<DiagramEditorBlockInfo>> getMapBlocksData(); //返回mapBlock中的数据
private:
QString sId;
QMap<int,QList<DiagramEditorBaseBlock*>> _mapBlocks; //容器中包含的对象列表,<pos,listBlocks> pos当前容器中的位置:0上,1中上,2中下3下
QString sId;
double dMidUpY; //1母上边界
double dMidDownY; //2母下边界
double dStartX; //起始x

View File

@ -61,6 +61,8 @@ public:
QUuid addConnection(const QString& str1,const QString& str2,int nType1,int nType2,int nPara = 0); //插入连接
QMap<QUuid,DiagramEditorBriefConnect>& getConnection() {return _mapConnect;}
void removeConnection(QUuid);
DiagramEditorProjectInfo getCurPara(); //获取当前的向导设置参数(同步数据到projectManager)
void setPara(DiagramEditorProjectInfo); //使用load数据初始化
private:
void initial();
void reOrderBus(); //重置bus次序

View File

@ -22,6 +22,7 @@ class DiagramEditorTransDetailSettingDlg;
class DiagramEditorModel;
class DiagramEditorPreviewDlg;
class ConfirmEditorDlg;
class DiagramCavas;
class EditPanel : public QWidget
{
@ -32,9 +33,9 @@ public:
void initByWizardInfo();
void initBlockConnection(); //初始化block之间的连接信息
void setOperateWizard(QPointer<DiagramEditorWizard> p) {_curWizard = p;}
void showPreview(); //展示预览
void showConfirmDlg(); //展示确认对话框
void showWizard();
DiagramEditorModel* getModel() {return _pModel;}
EditScene* getScene() {return m_pEditScene;}
@ -42,6 +43,13 @@ public:
void setProjectName(const QString& s){_projectName = s;};
QString getProjectName(){return _projectName;}
void setUuid(QUuid uid) {_uid = uid;}
QUuid getUuid() {return _uid;}
void setCavas(QPointer<DiagramCavas> p){_pCavas = p;}
QPointer<DiagramCavas> getCavas(){return _pCavas;}
void prepareSaveEditor(); //准备保存
void loadEditor(const QString&);
public slots:
void onWidthChanged(int width);
void onContainerSizeChanged(EditContainerItem*); //容器大小改变时调整内部大小
@ -64,11 +72,13 @@ private:
int _maxHeight;
QList<EditRowData*> _lstData;
QMap<int,QMap<int,EditContainerItem*>> _mapStruct;
QPointer<DiagramEditorWizard> _curWizard;
DiagramEditorModel* _pModel;
DiagramEditorPreviewDlg* _pPreview;
ConfirmEditorDlg* _confirmEditor;
QString _projectName;
QUuid _uid;
DiagramEditorWizard* _pEditorWizard;
QPointer<DiagramCavas> _pCavas; //顶层界面容器
};
#endif

View File

@ -36,8 +36,6 @@ public:
void setPanel(EditPanel* p) {_pPanel = p;}
EditPanel* getPanel(){return _pPanel;}
void setWizard(QPointer<DiagramEditorWizard> p){_pWizard = p;}
void setCavas(QPointer<DiagramCavas> p){_pCavas = p;}
QPointer<DiagramCavas> getCavas(){return _pCavas;}
QMap<QUuid,GraphicsBaseModelItem*> getPreviewItem(){return _previewItem;};
void generatePreview(); //生成预览
@ -64,8 +62,14 @@ public:
void clearCompoDir(QMap<QString,DiagramEditorRouteInfo>&,QMap<QString,DiagramEditorComponentInfo>&,int nSource); //清空component中的dir(updateTarget前调用)
QList<DiagramEditorComponentInfo> getRouteItemInfoList(QMap<QString,DiagramEditorComponentInfo>,QMap<QString,DiagramEditorRouteInfo>); //返回线路中包含的设备信息列表
QByteArray getWizardInfo(); //返回二进制wizard设置
void setWizardInfo(const QByteArray&); //二进制设置wizard
private:
void bulidAndLinkComponent(QList<DiagramEditorComponentInfo>,QMap<QString,DiagramEditorComponentInfo>); //生成并连接线路上的设备 lstmapComponents(从map中获取正确数据)
QByteArray serializeWizardData(const DiagramEditorProjectInfo &data); //序列化eidtor向导设置数据
DiagramEditorProjectInfo deserializeWizardData(const QByteArray &byteArray); //反序列化eidtor向导设置
private:
QMap<QUuid,GraphicsBaseModelItem*> _tempItem; //临时预览对象
QMap<QUuid,GraphicsBaseModelItem*> _previewItem; //预览对象
@ -76,6 +80,5 @@ private:
EditBaseScene* _pCurPreviewScene; //当前预览scene
EditPanel* _pPanel; //主界面
QPointer<DiagramEditorWizard> _pWizard; //向导界面数据
QPointer<DiagramCavas> _pCavas; //顶层界面容器
};

View File

@ -13,14 +13,16 @@
#include "baseProperty.h"
#include "diagramEditor/editPanel.h"
#include "graphicsDataModel/diagramEditorModel.h"
#include "projectManager.h"
#include "designerView.h"
#include "basePropertyManager.h"
#include <QLibrary>
#include <QMetaMethod>
DiagramCavas::DiagramCavas(QWidget *parent)
: QMdiArea(parent)
{
_pageIndex = 0;
_pEditorWizard = nullptr;
}
DiagramCavas::~DiagramCavas()
@ -35,6 +37,13 @@ DrawingPanel* DiagramCavas::getPanel(QString sPage)
return nullptr;
}
EditPanel* DiagramCavas::getEditPanel(QString sPage)
{
if(m_mapEditPanel.contains(sPage))
return m_mapEditPanel[sPage].first;
return nullptr;
}
void DiagramCavas::initial()
{
//todo:读取数据并初始化
@ -43,8 +52,6 @@ void DiagramCavas::initial()
{
TopologyManager::instance().createDiagram(QString::number(info.id),info.name);
}
//QString sPath = ComponentIconManager::instance().getIconPath("circuitBreaker",DM_edit,VI_thumbnail);
}
void DiagramCavas::onSignal_addDrawingPanel(PowerEntity* pItem,DiagramMode mode)
@ -157,7 +164,6 @@ void DiagramCavas::onSignal_loadPage(PowerEntity* p)
{
if(!m_mapDrawPanel.contains(p->name()))
{
//todo:加载数据
onSignal_addDrawingPanel(p);
QJsonObject context = DataBase::GetInstance()->getPageContextByName(p->name());
m_mapDrawPanel[p->name()].first->loadNodes(context);
@ -168,6 +174,21 @@ void DiagramCavas::onSignal_loadPage(PowerEntity* p)
}
}
void DiagramCavas::onSignal_loadEdit(const QString& sProject,QUuid uid)
{
if(!m_mapEditPanel.contains(sProject))
{
//todo:加载数据
onSignal_addEditWizard(sProject,uid);
m_mapEditPanel[sProject].first->loadEditor(sProject);
}
else //已存在
{
//todo:新建或加载时删除old
m_mapEditPanel[sProject].first->show();
}
}
void DiagramCavas::runPage(const QString sName)
{
QString pageName = sName+QString("_run");
@ -365,39 +386,38 @@ void DiagramCavas::onCreateTestBaseModelDiagram()
/*******************************************************/
void DiagramCavas::onSignal_createEditPanel(QString sName)
void DiagramCavas::onSignal_createEditPanel(QString sName,QUuid uid)
{
//onSignal_addEditPanel(sName);
onSignal_addEditWizard(sName);
onSignal_addEditWizard(sName,uid);
}
void DiagramCavas::onSignal_prepareSaveEdit(QString sProject)
{
EditPanel* pPanel = getEditPanel(sProject);
if(pPanel){
pPanel->prepareSaveEditor();
}
}
EditPanel* DiagramCavas::onSignal_addEditPanel(QString sName)
{
EditPanel* pPanel = new EditPanel(this);
pPanel->setProjectName(sName);
_curPage = sName;
pPanel->setWindowTitle(_curPage);
pPanel->setCavas(this);
QMdiSubWindow* pSub = this->addSubWindow(pPanel);
m_mapEditPanel.insert(_curPage,qMakePair(pPanel,pSub));
pPanel->show();
return pPanel;
}
void DiagramCavas::onSignal_addEditWizard(QString name)
void DiagramCavas::onSignal_addEditWizard(QString name,QUuid uid)
{
if(_pEditorWizard == nullptr){
_pEditorWizard = new DiagramEditorWizard(this);
connect(_pEditorWizard,&DiagramEditorWizard::wizardFinish,this,[&,name](){
EditPanel* pPanel = onSignal_addEditPanel(name);
pPanel->setOperateWizard(_pEditorWizard);
auto pModel = pPanel->getModel();
if(pModel){
pModel->setWizard(_pEditorWizard);
pModel->setCavas(this);
}
pPanel->initByWizardInfo();
});
}
_pEditorWizard->show();
EditPanel* pPanel = onSignal_addEditPanel(name);
pPanel->setUuid(uid);
pPanel->showWizard();
}
void DiagramCavas::onSignal_wizardFinished(QString sName,QMap<QUuid,GraphicsBaseModelItem*> mapItem,QList<EditBaseItem*> mapBay)
@ -442,3 +462,4 @@ void DiagramCavas::onSignl_openCurrentBay()
}
}
}

View File

@ -1,4 +1,5 @@
#include "diagramEditor/diagramEditorBaseBlock.h"
#include "diagramEditor/diagramEditorStructContainer.h"
DiagramEditorBaseBlock::DiagramEditorBaseBlock(QObject *parent)
: QObject(parent)
@ -26,6 +27,32 @@ void DiagramEditorBaseBlock::removeConnect(QUuid uid)
_lstCon.removeOne(uid);
}
DiagramEditorBlockInfo DiagramEditorBaseBlock::getBlockInfo()
{
DiagramEditorBlockInfo info;
info.sName = sName;
if(_curContainer)
info.sContainerId = _curContainer->getId();
info.nType = nType;
info.nContainerLevel = nContainerLevel;
info.uid = uid;
info._lstCon = _lstCon;
info.recSize = recSize;
info.sceneDelta = sceneDelta;
info.bEditState = bEditState;
info.fVoltage = fVoltage;
info.nBusType = nBusType;
info.nIndex = nIndex;
info.nBayType = nBayType;
info.bayInfo = bayInfo;
info.nTransType = nTransType;
info.transInfo = transInfo;
return info;
}
/***************************划分后的分段bus单元****************************/
DiagramEditorBusBlock::DiagramEditorBusBlock(QObject *parent)
:DiagramEditorBaseBlock(parent)

View File

@ -21,3 +21,20 @@ bool DiagramEditorStructContainer::insertBlock(int nPos,DiagramEditorBaseBlock*
_mapBlocks[nPos].append(p);
return true;
}
QMap<int,QList<DiagramEditorBlockInfo>> DiagramEditorStructContainer::getMapBlocksData()
{
QMap<int,QList<DiagramEditorBlockInfo>> map;
for(auto iter = _mapBlocks.begin();iter != _mapBlocks.end();++iter){
QList<DiagramEditorBlockInfo> lstInfo;
for(auto pBlock:iter.value()){
auto info = pBlock->getBlockInfo();
lstInfo.append(info);
}
map.insert(iter.key(),lstInfo);
}
return map;
}

View File

@ -20,6 +20,7 @@ DiagramEditorWizard::DiagramEditorWizard(QWidget *parent)
ui->setupUi(this);
_busPageChanged = false;
this->setWindowFlags(Qt::FramelessWindowHint | windowFlags());
setStyleSheet("background-color: white;");
initial();
}
@ -302,6 +303,49 @@ void DiagramEditorWizard::removeConnection(QUuid uid)
_mapConnect.remove(uid);
}
DiagramEditorProjectInfo DiagramEditorWizard::getCurPara()
{
DiagramEditorProjectInfo info;
QMap<int,QList<DiagramEditorContainerInfo>> mapLst;
for(auto iter = _mapSturctContainer.begin(); iter != _mapSturctContainer.end();++iter){
QList<DiagramEditorContainerInfo> lstInfo;
for(auto con:iter.value()){
DiagramEditorContainerInfo conInfo;
conInfo.mapBlockInfo = con->getMapBlocksData();
conInfo.sId = con->getId();
conInfo.dMidUpY = con->getMidUpY();
conInfo.dMidDownY = con->getMidDownY();
conInfo.dStartX = con->getStartX();
conInfo.dStartY = con->getStartY();
conInfo.dWidth = con->getWidth();
conInfo.dHeight = con->getHeight();
conInfo.dMaxUpH = con->getMaxUpH();
conInfo.dMaxDownH = con->getMaxDownH();
lstInfo.append(conInfo);
}
mapLst.insert(iter.key(),lstInfo);
}
info.mapBus = _mapBus;
info.mapSturctContainer = mapLst;
info.mapConnect = _mapConnect;
return info;
}
void DiagramEditorWizard::setPara(DiagramEditorProjectInfo info)
{
_mapBus = info.mapBus;
for(auto iter = info.mapSturctContainer.begin(); iter != info.mapSturctContainer.end();++iter){
QList<DiagramEditorStructContainer*> lstCon;
for(auto &conInfo:iter.value()){
}
}
}
void DiagramEditorWizard::addTransformer(DiagramEditorWizardTransformerInfo info)
{
int row = ui->tableWidget_trans->rowCount();

View File

@ -20,13 +20,14 @@
#include "graphicsDataModel/diagramEditorModel.h"
#include "diagramEditor/diagramEditorPreviewDlg.h"
#include "diagramEditor/confirmEditorDlg.h"
#include "projectManager.h"
#include "diagramCavas.h"
#include "global.h"
#include <QDebug>
EditPanel::EditPanel(QWidget *parent)
: QWidget(parent)
,_curWizard(nullptr)
,_pEditorWizard(nullptr)
,_bayDetailSetting(nullptr)
,_transDetailSetting(nullptr)
,_pModel(nullptr)
@ -59,7 +60,7 @@ EditPanel::~EditPanel()
void EditPanel::initByWizardInfo()
{
auto& mapTotal = _curWizard->getContainerStruct();
auto& mapTotal = _pEditorWizard->getContainerStruct();
for(auto iter = mapTotal.begin();iter != mapTotal.end();++iter){
if(iter.key() == g_transformerLevel)
continue;
@ -225,16 +226,16 @@ void EditPanel::initByWizardInfo()
void EditPanel::initBlockConnection()
{
if(_curWizard){
auto mapCon = _curWizard->getConnection();
if(_pEditorWizard){
auto mapCon = _pEditorWizard->getConnection();
//todo:添加过的不再添加
for(auto& con:mapCon){
int nPara = con.nPara;
auto item1 = _curWizard->getBlockByName_all(con.con1.sName);
auto item2 = _curWizard->getBlockByName_all(con.con2.sName);
auto item1 = _pEditorWizard->getBlockByName_all(con.con1.sName);
auto item2 = _pEditorWizard->getBlockByName_all(con.con2.sName);
auto con1 = _curWizard->getContainerByBlock_all(con.con1.sName);
auto con2 = _curWizard->getContainerByBlock_all(con.con2.sName);
auto con1 = _pEditorWizard->getContainerByBlock_all(con.con1.sName);
auto con2 = _pEditorWizard->getContainerByBlock_all(con.con2.sName);
auto pItem1 = getItemByName(item1->getName());
auto pItem2 = getItemByName(item2->getName());
@ -371,7 +372,7 @@ void EditPanel::showConfirmDlg()
_confirmEditor->setModelDelegate(_pModel);
connect(_confirmEditor,&ConfirmEditorDlg::onConfirmEditor,this,[&](QString sAuthor,QString sTime){
auto pCavas = _pModel->getCavas();
auto pCavas = getCavas();
if(pCavas){
//QList<DiagramEditorBayBlock*> lstBocks;
@ -384,6 +385,12 @@ void EditPanel::showConfirmDlg()
_confirmEditor->show();
}
void EditPanel::showWizard()
{
if(_pEditorWizard)
_pEditorWizard->show();
}
QList<EditBaseItem*> EditPanel::getBlockItems(EditorItemType typ)
{
QList<EditBaseItem*> lst;
@ -444,7 +451,7 @@ void EditPanel::onItemDbClicked(QPointer<DiagramEditorBaseBlock> pBlock)
if(_bayDetailSetting == nullptr){
_bayDetailSetting = new DiagramEditorBayDetailSettingDlg(this);
_bayDetailSetting->setModelDelegate(_pModel);
_bayDetailSetting->setWizard(_curWizard);
_bayDetailSetting->setWizard(_pEditorWizard);
}
auto pBay = dynamic_cast<DiagramEditorBayBlock*>(pBlock.data());
if(pBay)
@ -454,7 +461,7 @@ void EditPanel::onItemDbClicked(QPointer<DiagramEditorBaseBlock> pBlock)
if(_transDetailSetting == nullptr){
_transDetailSetting = new DiagramEditorTransDetailSettingDlg(this);
_transDetailSetting->setModelDelegate(_pModel);
_transDetailSetting->setWizard(_curWizard);
_transDetailSetting->setWizard(_pEditorWizard);
}
auto pTrans = dynamic_cast<DiagramEditorTransformerBlock*>(pBlock.data());
if(pTrans)
@ -473,6 +480,12 @@ void EditPanel::initial()
_maxWidth = _mainWidget->rect().width();
_maxHeight = _mainWidget->rect().height();
m_pEditView->centerOn(0,0);
_pEditorWizard = new DiagramEditorWizard(this);
connect(_pEditorWizard,&DiagramEditorWizard::wizardFinish,this,[&](){
initByWizardInfo();
});
_pModel->setWizard(_pEditorWizard);
}
void EditPanel::calculateContainerWidth(EditContainerItem* pItem)
@ -544,3 +557,19 @@ EditBaseItem* EditPanel::getItemByName(const QString& sName)
}
return nullptr;
}
void EditPanel::prepareSaveEditor()
{
if(_pModel){
QByteArray btWizard = _pModel->getWizardInfo();
ProjectManager::instance().saveEditorDataToDB(_uid,_projectName,_projectName,btWizard);
}
}
void EditPanel::loadEditor(const QString& str)
{
QByteArray byte = ProjectManager::instance().getEditorDataByName(str);
if(_pModel){
_pModel->setWizardInfo(byte);
}
}

View File

@ -17,6 +17,8 @@
#include "diagramEditor/editPanel.h"
#include "diagramEditor/diagramEditorWizard.h"
#include "diagramEditor/diagramEditorStructContainer.h"
#include <QJsonArray>
#include <QMetaMethod>
int g_nCompoWidth = 50; //元件默认宽度(计算布局使用)
int g_nCompoHeight = 50;
@ -2303,3 +2305,34 @@ QList<DiagramEditorComponentInfo> DiagramEditorModel::getRouteItemInfoList(QMap<
}
return lst;
}
QByteArray DiagramEditorModel::getWizardInfo()
{
DiagramEditorProjectInfo wizaInfo = _pWizard->getCurPara();
wizaInfo.sName = _pPanel->getProjectName();
wizaInfo.uid = _pPanel->getUuid();
QByteArray data = serializeWizardData(wizaInfo);
return data;
}
void DiagramEditorModel::setWizardInfo(const QByteArray& btye)
{
DiagramEditorProjectInfo info = deserializeWizardData(btye);
_pWizard->setPara(info);
}
QByteArray DiagramEditorModel::serializeWizardData(const DiagramEditorProjectInfo &data)
{
QByteArray byteArray;
QDataStream stream(&byteArray, QIODevice::WriteOnly);
stream << data; // 调用重载的操作符
return byteArray;
}
DiagramEditorProjectInfo DiagramEditorModel::deserializeWizardData(const QByteArray &byteArray)
{
QDataStream stream(byteArray);
DiagramEditorProjectInfo data;
stream >> data; // 调用重载的操作符
return data;
}

View File

@ -6,6 +6,7 @@ set(DIAGRAMUTILS_HEADER_FILES
include/componentIconManager.h
include/basePropertyManager.h
include/projectModelManager.h
include/projectManager.h
../common/include/global.h
../common/include/baseProperty.h
../common/include/compiler.hpp
@ -19,6 +20,7 @@ set(DIAGRAMUTILS_SOURCE_FILES
source/dataManager.cpp
source/basePropertyManager.cpp
source/projectModelManager.cpp
source/projectManager.cpp
source/componentIconManager.cpp
../common/source/global.cpp
../common/source/baseProperty.cpp
@ -44,7 +46,7 @@ target_link_libraries(diagramUtils PUBLIC Qt${QT_VERSION_MAJOR}::Core
target_link_libraries(diagramUtils PRIVATE Qt6::Xml)
target_link_libraries(diagramUtils PRIVATE Qt6::Network)
target_link_libraries(diagramUtils PRIVATE Qt6::Sql ${POSTGRESQL_LIBRARIES})
target_link_libraries(diagramUtils PRIVATE Qt6::Sql ${PostgreSQL_LIBRARIES})
option(BUILD_SHARED_LIBS "Build as shared library" ON)

View File

@ -132,6 +132,15 @@ public:
PropertyValueInfo selectGroupPropertyByValue(const QString& tableName,QUuid uuid,PropertyValueInfo value); //通过已有结构更新数据
QList<measureAttributeType> getMeasureAttributeTypes(); //获取所有量测属性
public:
/***********************************editor编辑器**********************************************/
bool insertEditorProject(QUuid,QString,QString,QByteArray);
bool updateEditorProject(QString name,QByteArray context);
QByteArray getEditorProjectByName(QString name);
QList<editorProjectInfo> getAllEditorProject();
bool deleteEditorProject(QString);
bool ifEditorProjectExist(QString name);
private:
QMap<int,attributeGroup> _attributeGroup; //属性组的组
QMap<int,dataType> _dataType; //数据类型组

View File

@ -0,0 +1,32 @@
#ifndef PROJECTMANAGER_H
#define PROJECTMANAGER_H
#include <QObject>
#include "global.h"
#include "export.hpp"
/****工程管理类
*
*****/
class DIAGRAM_DESIGNER_PUBLIC ProjectManager : public QObject
{
Q_OBJECT
public:
explicit ProjectManager(QObject *parent = nullptr);
~ProjectManager();
static ProjectManager& instance();
void saveEditorDataToDB(QUuid,const QString&,const QString&,QByteArray);
QByteArray getEditorDataByName(const QString&);
void createEditor(const QString&);
void saveEditor(const QString&);
signals:
void createNewEditor(const QString& str,QUuid id);
void editorSaved(const QString& str,QUuid uid);
void prepareSaveEditor(QString);
private:
QMap<QString,DiagramEditorProjectInfo> _wizardInfo;
};
#endif // PROJECTMANAGER_H

View File

@ -2845,3 +2845,134 @@ QStringList DataBase::ifModelOccupy(const QString& sName)
return lst;
}
}
bool DataBase::insertEditorProject(QUuid uid,QString name,QString tag,QByteArray byte)
{
QString strSQL = "INSERT INTO diagramui_editorprojects(global_uuid, name, tag, context) VALUES (?, ?, ?, ?)";
QVariantList params;
params.append(uid);
params.append(name);
params.append(tag);
params.append(byte);
try
{
executeSQL(strSQL,false,params);
return true;
}
catch (const std::exception& e)
{
LOG_ERROR("DB", QString("Insert diagramui_editorprojects fail"));
return false;
}
}
bool DataBase::updateEditorProject(QString name,QByteArray context)
{
QString strSQL = "UPDATE diagramui_editorprojects SET context = ? WHERE name = ?";
QVariantList params;
params.append(context);
params.append(name);
try
{
executeSQL(strSQL,false,params);
return true;
}
catch (const std::exception& e)
{
LOG_ERROR("DB", QString("Update diagramui_editorprojects %1 fail").arg(name));
return false;
}
}
QByteArray DataBase::getEditorProjectByName(QString name)
{
QByteArray byte;
QString strSQL = "SELECT context FROM diagramui_editorprojects WHERE name = ?";
QVariantList params;
params.append(name);
try
{
QSqlQuery query = executeSQL(strSQL,false,params);
while (query.next())
{
byte = query.value(0).toByteArray();
}
query.clear();
return byte;
}
catch (const std::exception& e)
{
return byte;
}
}
QList<editorProjectInfo> DataBase::getAllEditorProject()
{
QList<editorProjectInfo> lst;
QString strSQL = "SELECT id,global_uuid,name,tag,context FROM diagramui_editorprojects";
try
{
QSqlQuery query = executeSQL(strSQL);
while (query.next())
{
editorProjectInfo info;
info.id = query.value(0).toInt();
info.uuid = QUuid(query.value(1).toString());
info.name = query.value(2).toString();
info.tag = query.value(3).toString();
info.context = query.value(4).toByteArray();
lst.append(info);
}
query.clear();
return lst;
}
catch (const std::exception& e)
{
return lst;
}
}
bool DataBase::deleteEditorProject(QString name)
{
QString strSQL = "DELETE FROM diagramui_editorprojects WHERE name = ?";
QVariantList params;
params.append(name);
try
{
executeSQL(strSQL,false,params);
LOG_INFO("DB", QString("Delete diagramui_editorprojects %1 success").arg(name));
return true;
}
catch (const std::exception& e)
{
LOG_INFO("DB", QString("Delete diagramui_editorprojects %1 fail").arg(name));
return false;
}
}
bool DataBase::ifEditorProjectExist(QString name)
{
QString strSQL = "SELECT * FROM diagramui_editorprojects WHERE name = ?";
QVariantList params;
params.append(name);
try
{
QSqlQuery query = executeSQL(strSQL,false,params);
while (query.next())
{
return true;
}
}
catch (const std::exception& e)
{
return false;
}
return false;
}

View File

@ -0,0 +1,65 @@
#include "projectManager.h"
#include "dataBase.h"
#include <QMessageBox>
ProjectManager& ProjectManager::instance()
{
//采用静态局部变量的方式,静态局部变量的初始化是在第一次访问时,以后的调用不会多次初始化,并且生命周期和程序一致
static ProjectManager instance;
return instance;
}
ProjectManager::ProjectManager(QObject *parent)
: QObject(parent)
{
}
ProjectManager::~ProjectManager()
{
}
void ProjectManager::saveEditorDataToDB(QUuid uid,const QString& name,const QString& tag,QByteArray byte)
{
bool val = DataBase::GetInstance()->ifEditorProjectExist(name);
if(val)
{
bool res = DataBase::GetInstance()->updateEditorProject(name,byte);
if(res){
emit editorSaved(name,uid);
QMessageBox::information(NULL, QString("提示"), QString::fromWCharArray(L"更新成功"));
}
else
QMessageBox::information(NULL, QString("提示"), QString::fromWCharArray(L"更新失败"));
}
else{
bool res = DataBase::GetInstance()->insertEditorProject(uid,name,tag,byte);
if(res){
emit editorSaved(name,uid);
QMessageBox::information(NULL, QString("提示"), QString::fromWCharArray(L"保存成功"));
}
else
QMessageBox::information(NULL, QString("提示"), QString::fromWCharArray(L"保存失败"));
}
}
QByteArray ProjectManager::getEditorDataByName(const QString& name)
{
return DataBase::GetInstance()->getEditorProjectByName(name);
}
void ProjectManager::createEditor(const QString& name)
{
if(!_wizardInfo.contains(name)){
QUuid uid = QUuid::createUuid();
_wizardInfo[name].sName = name;
_wizardInfo[name].uid = uid;
emit createNewEditor(name,uid);
}
}
void ProjectManager::saveEditor(const QString& name)
{
emit prepareSaveEditor(name);
}

View File

@ -16,8 +16,7 @@ public:
void initial();
void showDlg();
signals:
void createEditor(QString);
public slots:
void onOkClicked();
void onCancelClicked();

View File

@ -9,6 +9,8 @@ QT_BEGIN_NAMESPACE
namespace Ui { class diagramView; }
QT_END_NAMESPACE
class QTreeWidgetItem;
class DiagramView : public QDialog
{
Q_OBJECT
@ -24,16 +26,28 @@ signals:
void diagramChange(DiagramInfo);
void diagramDelete(DiagramInfo);
void diagramSelected(DiagramInfo);
void loadProject();
public slots:
void onIndexRbtnClicked(const QPoint &pos); //索引列表右键菜单
void onItemChanged(QStandardItem *item);
void onItemClicked(const QModelIndex &index);
void onEditorRbtnClicked(const QPoint &pos); //editor右键菜单
//**********editor************
void onNewEditorCreated(const QString&,QUuid);
void onEditorSaved(const QString&,QUuid);
void onNewEditorClicked();
void onOpenEditorClicked();
void onSaveEditorClicked();
private:
Ui::diagramView *ui;
QStandardItemModel* _pModel;
int _count;
private:
QString generateName();
int getItemLevel(QTreeWidgetItem *item);
};
#endif

View File

@ -19,7 +19,7 @@ public:
void initial();
void updateList();
signals:
void selectedPage(const QString&);
void selectedProject(const QString&,QUuid);
public slots:
void onOkClicked();
void onCancelClicked();

View File

@ -1,5 +1,6 @@
#include <QPushButton>
#include "createEditor.h"
#include "projectManager.h"
#include "ui_createEditor.h"
CreateEditor::CreateEditor(QWidget *parent)
@ -30,7 +31,7 @@ void CreateEditor::showDlg()
void CreateEditor::onOkClicked()
{
emit createEditor(ui->le_name->text());
ProjectManager::instance().createEditor(ui->le_name->text());
hide();
}

View File

@ -5,6 +5,7 @@
#include "ui_diagramView.h"
#include "tools.h"
#include "topologyManager.h"
#include "projectManager.h"
#include "dataBase.h"
DiagramView::DiagramView(QWidget *parent)
@ -15,6 +16,7 @@ DiagramView::DiagramView(QWidget *parent)
ui->setupUi(this);
_pModel = new QStandardItemModel(this);
ui->treeView->setContextMenuPolicy(Qt::CustomContextMenu);
ui->treeWidget->setContextMenuPolicy(Qt::CustomContextMenu);
_count = 0;
}
@ -26,9 +28,17 @@ DiagramView::~DiagramView()
void DiagramView::initial()
{
connect(ui->treeView, &QTreeView::customContextMenuRequested, this, &DiagramView::onIndexRbtnClicked);
connect(ui->treeWidget, &QTreeView::customContextMenuRequested, this, &DiagramView::onEditorRbtnClicked);
connect(ui->treeView, &QTreeView::clicked, this, &DiagramView::onItemClicked);
connect(_pModel, &QStandardItemModel::itemChanged, this, &DiagramView::onItemChanged);
connect(ui->btn_new, &QPushButton::clicked, this, &DiagramView::onNewEditorClicked);
connect(ui->btn_open, &QPushButton::clicked, this, &DiagramView::onOpenEditorClicked);
connect(ui->btn_save, &QPushButton::clicked, this, &DiagramView::onSaveEditorClicked);
connect(&ProjectManager::instance(),&ProjectManager::createNewEditor,this,&DiagramView::onNewEditorCreated);
connect(&ProjectManager::instance(),&ProjectManager::editorSaved,this,&DiagramView::onEditorSaved);
ui->treeView->setHeaderHidden(true);
ui->treeWidget->setHeaderHidden(true);
ui->treeWidget->setColumnCount(2);
// 设置模型的列数
_pModel->setColumnCount(1);
@ -173,6 +183,84 @@ void DiagramView::onItemClicked(const QModelIndex &index)
}
}
void DiagramView::onEditorRbtnClicked(const QPoint &pos)
{
QTreeWidgetItem *item = ui->treeWidget->itemAt(pos);
if (!item) return;
int level = getItemLevel(item);
QMenu menu(this);
switch (level) {
case 1:{ // 顶级节点
QAction *actSaveTop = menu.addAction("保存");
QAction *actGenTop = menu.addAction("生成");
menu.addSeparator();
QAction *actDelTop = menu.addAction("删除");
QAction *act = menu.exec(ui->treeWidget->mapToGlobal(pos));
if(act == actSaveTop){
ProjectManager::instance().saveEditor(item->text(0));
}
else if(act == actGenTop){
}
else if(act == actDelTop){
}
}
break;
case 2:{ // 二级节点
}
break;
case 3:{ // 三级节点
}
break;
}
}
void DiagramView::onNewEditorCreated(const QString& str,QUuid id)
{
ui->treeWidget->clear();
QTreeWidgetItem *topLevelItem = new QTreeWidgetItem(ui->treeWidget);
topLevelItem->setText(0, str);
topLevelItem->setData(0,Qt::UserRole,id);
topLevelItem->setText(1,"未保存");
topLevelItem->setForeground(1,Qt::yellow);
}
void DiagramView::onEditorSaved(const QString& str,QUuid uid)
{
QTreeWidgetItemIterator it(ui->treeWidget);
while (*it) {
QTreeWidgetItem* item = *it;
if(item->data(0,Qt::UserRole).toUuid() == uid)
{
item->setText(1,"已保存");
item->setForeground(1,Qt::green);
break;
}
++it;
}
}
void DiagramView::onNewEditorClicked()
{
}
void DiagramView::onOpenEditorClicked()
{
emit loadProject();
}
void DiagramView::onSaveEditorClicked()
{
}
QString DiagramView::generateName()
{
QString sName = QString::fromWCharArray(L"组态图_")+QString::number(_count);
@ -186,3 +274,12 @@ QString DiagramView::generateName()
return sName;
}
}
int DiagramView::getItemLevel(QTreeWidgetItem *item) {
int level = 0;
while (item->parent()) {
level++;
item = item->parent();
}
return level + 1; // 顶级节点为1级
}

View File

@ -40,14 +40,16 @@ void LoadPageDlg::updateList()
QStandardItem* itemRoot = m_standardItemModel->invisibleRootItem();
// 创建并添加Item的第一个子节点
QStandardItem* itemPage = new QStandardItem(QStringLiteral("本站"));
QStandardItem* itemPage = new QStandardItem(QStringLiteral("项目列表"));
itemRoot->appendRow(itemPage);
QList<QStandardItem*> pageList;
QList<pageInfo> lst = DataBase::GetInstance()->getAllPage();
for(auto info:lst)
auto lst = DataBase::GetInstance()->getAllEditorProject();
for(auto &info:lst)
{
pageList.append(new QStandardItem(info.name));
QStandardItem* item = new QStandardItem(info.name);
item->setData(info.uuid);
pageList.append(item);
}
itemPage->appendRows(pageList);
}
@ -60,7 +62,8 @@ void LoadPageDlg::onOkClicked()
if(item)
{
_pageName = item->text();
Q_EMIT selectedPage(_pageName);
QUuid uid = item->data().toUuid();
Q_EMIT selectedProject(_pageName,uid);
}
hide();

View File

@ -28,6 +28,8 @@
#include "diagramView.h"
#include "createEditor.h"
#include "projectModelManager.h"
#include "projectManager.h"
#include <QLibrary>
//using namespace ads;
@ -138,6 +140,8 @@ void CMainWindow::initializeAction()
connect(m_pDiagramView,&DiagramView::diagramDelete,m_pDiagramCavas,&DiagramCavas::onSignal_deleteDiagram);
connect(m_pDiagramView,&DiagramView::diagramSelected,m_pDiagramCavas,&DiagramCavas::onSignal_selectDiagram);
connect(m_pDiagramView,&DiagramView::loadProject,this,&CMainWindow::onSignal_loadPage);
connect(ui->actionNew,&QAction::triggered,m_pDiagramCavas,&DiagramCavas::onSignal_addPage);
connect(ui->actionOpen,&QAction::triggered,this,&CMainWindow::onSignal_loadPage);
connect(ui->actionSave,&QAction::triggered,m_pDiagramCavas,&DiagramCavas::onSignal_savePage);
@ -239,7 +243,7 @@ void CMainWindow::onSignal_loadPage()
if(m_pLoadPageDlg == nullptr)
{
m_pLoadPageDlg = new LoadPageDlg(this);
//connect(m_pLoadPageDlg,&LoadPageDlg::selectedPage,m_pDiagramCavas,&DiagramCavas::onSignal_loadPage);
connect(m_pLoadPageDlg,&LoadPageDlg::selectedProject,m_pDiagramCavas,&DiagramCavas::onSignal_loadEdit);
}
m_pLoadPageDlg->updateList();
m_pLoadPageDlg->show();
@ -249,8 +253,10 @@ void CMainWindow::onAction_createEditor()
{
if(m_pCreateEdiotr == nullptr){
m_pCreateEdiotr = new CreateEditor(this);
connect(m_pCreateEdiotr,&CreateEditor::createEditor,m_pDiagramCavas,&DiagramCavas::onSignal_createEditPanel);
connect(&ProjectManager::instance(),&ProjectManager::createNewEditor,m_pDiagramCavas,&DiagramCavas::onSignal_createEditPanel);
connect(&ProjectManager::instance(),&ProjectManager::prepareSaveEditor,m_pDiagramCavas,&DiagramCavas::onSignal_prepareSaveEdit);
}
m_pCreateEdiotr->showDlg();
}

View File

@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>199</width>
<width>266</width>
<height>455</height>
</rect>
</property>
@ -14,8 +14,77 @@
<string>Dialog</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QTreeView" name="treeView"/>
<widget class="QTabWidget" name="tabWidget">
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="tab">
<attribute name="title">
<string>基模组态</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QTreeWidget" name="treeWidget"/>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QPushButton" name="btn_new">
<property name="text">
<string>新建</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btn_open">
<property name="text">
<string>打开</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btn_save">
<property name="text">
<string>保存</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_2">
<attribute name="title">
<string>工程模组态</string>
</attribute>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QTreeView" name="treeView"/>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>