#pragma once #include "qglobal.h" #if (QT_VERSION >= 0x050000) #include #define QWebView QWebEngineView #else #include #endif #include "mAlgDefines.h" #include "iWxDiffusionBase.h" #include "mToolDiffusion_global.h" class ZxTableView; class ZxTableModel; class iGridRowUtils; class ZxPtyDock; class IxPtySource; class ZxRenderItem; class ZxObjCurve; class iCurveDesc; class iGuiPlot; class iWxDiffusionHeader; class iAlgDiffusionBase; class M_TOOL_DIFFUSION_EXPORT iWxDiffusionSub : public iWxDiffusionBase { Q_OBJECT public: explicit iWxDiffusionSub(QString sDiffusion, \ QWidget* parent /*= 0*/); ~iWxDiffusionSub(); // 设置关联 void setBindInfos(iWxDiffusionHeader* pSubHeader); // 初始化 virtual void initUI(); // 导出导入 virtual bool importOrExport(bool bImport); // 当主窗体相态发生改变时的处理(主+次,其中次为组合,需要解析) virtual void freshOnPhaseChanged(QMap& map); void makesurePft(); /// @brief 获取 Diffusion页面中,某个参数的具体数值 /// @param sPara,参数,英文标识而且大小写敏感 /// @param d,返回的结果 /// @note 主要是左侧属性页上的各项的数据,参照xml定义进行读取 virtual bool getDiffParaOf(QString sPara, double& d); /// @brief 获取 Diffusion页面中,计算结果,基本上就是右侧对应表格的数据 /// @param vvec,返回数据,即计算结果,与右侧表格对应 virtual bool getDiffRstOf(VVecDouble& vvec); /// @brief 获取 Diffusion页面中,所有参数数值 /// @param dso,参数,代表是相渗还是压敏还是吸附 /// @param map,返回的结果。 /// @param bOnlyFitted,是否只考虑拟合类参数,本处不涉及 /// @param bClearMap,是否清空。 /// @note 主要是左侧属性页上的各项的数据,参照xml定义进行读取 virtual bool getDiffAllParaValues(QMap& map, \ bool bOnlyFitted = false, \ bool bClearMap = true); iAlgDiffusionBase* getAlg(bool bCreateIfNotExists = false); protected: // 标识 virtual void configLabels(); virtual QStringList getTableTitles(); // 布局 virtual void initUI_Inputs(); virtual QWidget* initUI_Inputs_Up(); virtual void initUI_Inputs_Up_GridPty(QVBoxLayout*& pLayoutV); virtual void initUI_Inputs_Up_Fuzzies(QVBoxLayout*& pLayoutV); virtual QWidget* initUI_Inputs_Down(); virtual void initUI_Inputs_Down_TableView(QVBoxLayout*& pLayoutV); virtual void initUI_Chart(); virtual void initUI_Chart_One(iGuiPlot* pWxPlot); virtual void initUI_DockPty(); virtual void initUI_Outputs_TableView(); virtual void initUI_Others(); // 默认值 virtual void initDefault(); void fillTableViewWithDefault(ZxTableView* pTableView); // 返回指定的绘图对象体 virtual iGuiPlot* getWxPlotOf(int n = 0); protected: void bindDockPty(IxPtySource* pPtyObj); // 组织初始x数值 virtual VecDouble defaultInputs(); virtual double defaultScaleMax(); virtual double defaultScaleMin(); virtual int defaultInputCount(); protected: // 算法相关 virtual void resetGridPty(); virtual bool makesureAlg(); virtual bool configAlg(); // 输入表格 virtual void freshChartByTableInputsChange(); virtual bool makesureTableInputs(VVecDouble& vvec); virtual void refreshTableAbouts(VVecDouble& vvec); // 算法算法 virtual void freshChartByGridPtyChange(); // 结果图+表 virtual void refreshRstAbouts(VVecDouble& vvec); virtual void refreshRstCharts(VVecDouble& vvec); virtual void refreshRstTables(VVecDouble& vvec); virtual void clearChart(iGuiPlot* pWxPlot, bool bClearAll = true); //false时,只清空曲线不清空点 // 调用算法 virtual bool calRstByGridPty(VVecDouble& vvec); // 是否用户输入时更改相关界面布局 virtual void freshUiByTableInputs(bool bCustom); protected: virtual void paintEvent(QPaintEvent*); virtual void resizeEvent(QResizeEvent*); virtual void onSerialize(ZxSerializer* ser); virtual void onDeserialize(ZxSerializer* ser); public: // 类似clone virtual void copyFrom(ZxUiBase* p); public slots: // 响应左侧GridPty数据的改变,注意:该函数为父类继承过来的函数,不能进行名称更改 virtual void slotParaCtrlValueChanged(QString sPara, QVariant o); // 表格 void slotTableDataChanged(const QModelIndex&, const QModelIndex&); void slotTableRowChanged(QModelIndexList listOlds, QModelIndexList listNews, QModelIndex index); // 窗体构建及图窗口构建过程中涉及的信号 virtual void slotToolbarBuilt(QToolBar* pToolBar); virtual void slotGraphItemPoliciesInstalled(ZxRenderItem*); virtual void slotCustomInputClicked(); virtual void slotPtCountChanged(); // 图上选中了某一条曲线 // virtual void slotCurveSelected(ZxObjCurve* pCurve, bool bSelected); signals: // 从主窗体获取当前的相态(主+次,其中次为组合,需要解析) void sigGetCurPhaseOptions(QMap&); public: // 从当前所有的信息中获取参数的值 virtual bool getParaValue(QString sPara, double &dValue, QString sUnitDest = ""); // 返回所有参数,Key为英文ID virtual bool getAllParaValues(QMap& map, bool bOnlyFitted = false, bool bClearMap = true); // 获取结果 virtual bool getAllResults(QMap& mapResults); // 获取类似Zg、Cg的页面的原始数据 virtual bool getRawDataOf(QString sPara, VecDouble& x, VecDouble& y); virtual bool getRawDataOf(QString sPara, VVecVariant& vvec); virtual bool saveDiffusion(); // 文件标识 virtual QString getFileDiffusionTag(); protected: // FluidType,这是主类型 QString m_sDiffusion; // SubHeader iWxDiffusionHeader* m_pSubHeader; // 布局(左侧) QGroupBox* m_pWxInputs; iGridRowUtils* m_pGridItemUtils; ZxTableView* m_pTableViewInputs; ZxTableModel* m_pTableModelInputs; // 布局(中间) iGuiPlot* m_pWxPlot; // 布局(油藏) ZxTableView* m_pTableViewOutputs; ZxTableModel* m_pTableModelOutputs; QTabWidget* m_pTabWx; //右侧显示区(多个) QGroupBox* m_pGbxTop; QGroupBox* m_pGbxBottom; QSplitter* m_pSplitter; QCheckBox* m_pCbxTableInputMode; QLineEdit* m_pTbxPtCount; // 左侧输入 QStringList m_listParas; //哪些参数,对应英文标识 // 属性框 ZxPtyDock* m_pDockPty; QList m_listProps; // 坐标轴相关 QStringList m_listNames; QStringList m_listUnits; QString m_sTitle; // 相态选择(从前面传递过来) // map["MainOption"] = (int)opMain; // map["SubOption"] = (int)fluidType; QMap m_mapPhaseInfos; // 临时变量不涉及序列化 PvtFluidType m_oPft; //可以是单相,也可以是多相组合 // 调用的算法 iAlgDiffusionBase* m_pAlg; // 参数列表(左侧) QMap m_mapParas; };