add save editor sturcture
This commit is contained in:
parent
52e2efdfcf
commit
1edfb1cb3d
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 //工程模图元数据
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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次序
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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>); //生成并连接线路上的设备 lst,mapComponents(从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; //顶层界面容器
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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()
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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; //数据类型组
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -16,8 +16,7 @@ public:
|
|||
|
||||
void initial();
|
||||
void showDlg();
|
||||
signals:
|
||||
void createEditor(QString);
|
||||
|
||||
public slots:
|
||||
void onOkClicked();
|
||||
void onCancelClicked();
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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级
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
Loading…
Reference in New Issue