#ifndef PROJECTMODELDLG_H #define PROJECTMODELDLG_H #include #include #include QT_BEGIN_NAMESPACE namespace Ui { class projectModelDlg; } QT_END_NAMESPACE struct PropertyState //每个属性的状态 { bool checkState = false; QString dataType; }; struct PropertyPage //属性列表信息 { QStandardItemModel* pBase; //基础属性 QStandardItemModel* pSelect; //已选择属性 QMap mCheckState; //属性选择状态 }; typedef QMap MapProperty; //str为属性名,model1基础属性,model2已选择属性 struct PropertyModel //工程模 { MapProperty mapProperty; int nType = 0; //工程模类型,选择图标后确定 }; typedef QMap MapProject; //str为工程名,property为属性集 typedef QMap MapMeta; //str为元模名,project为工程模集 class RenameModel; class projectModelDlg : public QDialog { Q_OBJECT public: projectModelDlg(QWidget *parent = nullptr); ~projectModelDlg(); void initial(); void initialModel(); void initialList(); MapProperty addNewProject(const QString& sMeta,const QString& sProject); //根据元模型、工程模名称生成工程模对象 void update(); void generate(const QString&); //根据输入名称生成表 public slots: void onSaveClicked(); void onCancelClicked(); void onApplyClicked(); void onRevokeClicked(); void onBaseModelIndexChanged(const QString&); void onProjectIndexChanged(const QString&); void onPropertyIndexChanged(const QString&); void onIconClicked(const QModelIndex &index); //关联图元改变 void onIndexClicked(const QModelIndex &index); //索引列表点击 void onIndexRbtnClicked(const QPoint &pos); //索引列表右键菜单 void onDeleteProjectClicked(); //删除选中工程模 public: QStringList getModelList() const; //获取元模型列表 QStringList getGroupList(const QString& model) const; //返回该元模下的属性组列表 QStringList getAttributeList(const QString& model,const QString& group) const; //根据元模名和组名返回属性列表 void setItemAttribute(const QString&,QStandardItem*); //设置item的属性(数据库表字段名) QPair combinePropertySql(const QStandardItem*); //根据item属性生成sql QString getProjectName() const; //返回当前选择项目的名称 QString getMetaName() const; //返回当前元模型名 bool ifProjectEqual(QMap); //根据每个属性组的勾选状态判断两个模型是否相同 QString modifyProjectModel(QMap); //修改工程模 private: void updateIconList(); //选择工程模后刷新关联图标 void removeProjectData(const QString&,const QString&); //移除对应的project层级结构 QString getItemDataType(const QStandardItem* pItem); //返回数据类型 bool createPropertyTable(const QString& sProject,MapProperty::Iterator iter,int nLinkType); //创建属性组表并插入记录到管理表(工程名,当前项迭代器,关联图元类型) QJsonObject getSelectedState(MapProperty::Iterator iter); //返回json格式的选中状态 private: Ui::projectModelDlg *ui; RenameModel* m_pRenameModel; QStandardItemModel* _viewModel; //索引view模型 MapMeta m_mapTotal; QString _curMeta; //当前元模型 QString _curProject; //当前工程模 QString _curProperty; //当前属性 }; #endif