#pragma once #include "mAlgDefines.h" #include "iWxPvtBase.h" #include "mToolPvt_global.h" namespace Ui { class iWxPvtSubHeader; } class M_TOOL_PVT_EXPORT iWxPvtSubHeader : public iWxPvtBase { Q_OBJECT public: explicit iWxPvtSubHeader(QWidget *parent = 0); ~iWxPvtSubHeader(); /// @brief 设置PVT流体相态,其实是枚举类型,只是为了支持数组,暂时用了int /// @param nMain 大类,常规/特殊/状态方程,其实是:PvtFluidClass opMain /// @param vecSubs 子类,油/气/水/凝析,其实是:PvtFluidType opSub //void initPhaseInfos(int nMain, VecInt& vecSubs); void refreshByPhases(QStringList& listPhases, int n = -1); // 根据当前是解析还是数值进行简单调整(该函数在initUI之前) void adjustUI(bool bAnalMode); // 初始化 virtual void initUI(); void copyFrom(ZxUiBase* p); // 返回数据 virtual QString getName(); double getTempBase(); double getPressureBase(); double getGorBase(); VecDouble* getPtrOfValueP(); VecDouble* getPtrOfValueT(); // 文件标识 virtual QString getFilePvtTag(); // 在导航模式下,点击下一步时,先判断本步是否正确 virtual bool checkCurWxInputs(); // 返回所有参数,Key为英文ID virtual bool getAllParaValues(QMap& map, \ bool bOnlyFitted = false, \ bool bClearMap = true); virtual bool getAllParaValuesUnit(QMap& map, \ bool bOnlyFitted = false, \ bool bClearMap = true); virtual bool getParaValue(QString sPara, \ double& dValue, \ QString sUnitDest = ""); public: // 用于参数传递 // 注意:在pvtMain的序列化过程中,其本身未进行序列化,所以其相关参数暂未涉及 // 故全部放在此处进行维护 QStringList getListPhases(); PvtFluidType getPft(); // 这是从前一个取 QStringList getFuzzyParas(); //哪些参数可以从前一个窗体获取 void setValuesFromPrevWx(QMap& map);//从前一个窗体得到后赋值 // 这是为后一个设置 void getValuesForNextWx(QStringList& listParas, QMap& map); // 有PvtMain调用 bool freshRstByParaValues(QMap& map, bool bOnlyCt = false); private: // 流体参数项 void initFluidParas(bool bInit); void initAdvCtrls(); void freshAdvCtrls(); // 默认值填入 void initDefault(); // signal void buildSignals(); // 填入最大最小的单位 void fillUnitOfRange(); // 刷新 void refresh(); // 计算压力温度点 void calPressAndTemp(QLineEdit* pSender = nullptr); bool _calIncrement(double& d, \ double dMax, double dMin, \ bool bModeP); bool _calVecOfIncrements(VecDouble& vec, \ double dIncrement, \ double& dMax, double dMin, \ int nFixedSize = -1); // 油气水饱和度系数 void makesureOgwCoefs(); protected: virtual void paintEvent(QPaintEvent*); virtual void resizeEvent(QResizeEvent*); virtual bool eventFilter(QObject* object, QEvent* event); virtual void onSerialize(ZxSerializer* ser); virtual void onDeserialize(ZxSerializer* ser); // virtual void onDeserialized(); private slots: private slots: void on_cbxByPtCount_clicked(); void slotMaxMinChanged(QString); // void slotMaxMinStrChanged(); void slotCbxUnitPChanged(const QString s); void slotCbxUnitTChanged(const QString s); virtual void slotParaValueChanged(); // 某项参数计算结果数据更改 void slotParaRstDataChanged(QString sPara); // void slotPvtResultsChanged(QMap& map); // void slotFluidMainOptionClicked(int nIndex); // void on_cbxOil_clicked(); // void on_cbxGas_clicked(); // void on_cbxWater_clicked(); // void on_cbxCondense_clicked(); void on_cbxUseAdvanced_clicked(); void on_btnFresh_clicked(); void on_btnDefault_clicked(); private: void onFluidTypeChanged(PvtFluidClass opMain, PvtFluidType opSub); signals: /// @brief 当Header涉及到的一些参数数据更改时触发,比如压力数据范围改变 void sigHeaderOptionDataChanged(); /// @brief 当Heade中流体选项发生改变触发 /// @param nMain 大类,常规/特殊/状态方程 /// @param vecSubs 子类,油/气/水/凝析 //void sigHeaderOptionFluidChanged(int nMain, VecInt& vecSubs); /// @brief 当切换高级选项时,获取数据时,触发 void sigGetAllParaValues(QMap& map); private: Ui::iWxPvtSubHeader *ui; // 压力数据数组 VecDouble m_vecValueP; // 温度数据数组,温度是后台计算的。 VecDouble m_vecValueT; //double m_dMaxT; //温度范围,固定:20-400℃ 摄氏度 //double m_dMinT; QString m_sLastUnitP; QString m_sLastUnitT; // PvtFluidClass m_oPfc; QStringList m_listParas;// 当前流体对应的参数 QStringList m_listAllParas;// 全部参数,不涉及序列化,此处只是权宜之计,有待完善 TODO // 注意:在pvtMain的序列化过程中,其本身未进行序列化,所以其相关参数暂未涉及 // 故全部放在此处进行维护 QStringList m_listPhases; PvtFluidType m_oPft; bool m_bAnalMode; //临时不涉及序列化 QMap m_mapDefaultValues; //临时不涉及序列化 };