#pragma once #include "mAlgDefines.h" #include "iWxPseuBase.h" #include "mToolPseu_global.h" namespace Ui { class iWxPseuHeader; } class M_TOOL_PSEU_EXPORT iWxPseuHeader : public iWxPseuBase { Q_OBJECT public: explicit iWxPseuHeader(QWidget *parent = 0); ~iWxPseuHeader(); /// @brief 设置Pseu流体相态,其实是枚举类型,只是为了支持数组,暂时用了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); // 外传 void setOtherParas(QMap& maps); // 初始化 virtual void initUI(); // 返回数据 virtual QString getName(); double getTempBase(); double getPressureBase(); double getGorBase(); VecDouble* getPtrOfValueP(); VecDouble* getPtrOfValueT(); // double getSpecialV(QString s); QMap getMapComps(); // 文件标识 virtual QString getFilePseuTag(); // 在导航模式下,点击下一步时,先判断本步是否正确 virtual bool checkCurWxInputs(); public: // 用于参数传递 // 这是从前一个取 QStringList getFuzzyParas(); //哪些参数可以从前一个窗体获取 void setValuesFromPrevWx(QMap& map);//从前一个窗体得到后赋值 // 这是为后一个设置 void getValuesForNextWx(QStringList& listParas, QMap& map); private: // 流体参数项 void initFluidParas(); // 默认值填入 void initDefault(); // signal void buildSignals(); // 填入最大最小的单位 void fillUnitOfRange(); // 刷新 void refresh(); // 计算压力温度点 void calPressAndTemp(); bool _calIncrement(double& d, double dMax, double dMin); bool _calVecOfIncrements(VecDouble& vec, double dIncrement, double dMax, double dMin); 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); private slots: void slotChangeIncrements(); void slotMaxMinChanged(QString); void slotMaxMinStrChanged(); void slotCbxUnitMaxMinChanged(const QString s); virtual void slotParaValueChanged(); void slotCompSubChanged(QMap& map); void on_btnComposition_clicked(); private: void onFluidTypeChanged(PvtFluidClass opMain, PvtFluidType opSub); signals: //void sigInputRefresh(bool, VVecDouble*); /// @brief 当Header涉及到的一些参数数据更改时触发,比如压力数据范围改变 void sigHeaderOptionDataChanged(); private: Ui::iWxPseuHeader *ui; // 压力数据数组 VecDouble m_vecValueP; // 温度数据数组,温度是后台计算的。 VecDouble m_vecValueT; double m_dMaxT; //温度范围,固定:20-400℃ 摄氏度 double m_dMinT; QString m_sLastUnitMaxMin; QMap m_mapComps; // 保存所有的计算结果 //VVecDouble m_vvecResults; QStringList m_listParas;// 当前流体对应的参数 bool m_bAnalMode; //临时不涉及序列化 };