#pragma once #include "iWxPvtBase.h" #include "mToolPvt_global.h" class iPvtBase; class iGuiPlot; class ZxTableView; class ZxTableModel; class iWxPvtSubHeader; class iWxPvtUtilOption; class M_TOOL_PVT_EXPORT iWxPvtUtilItem : public iWxPvtBase { Q_OBJECT public: explicit iWxPvtUtilItem(QWidget *parent = 0); ~iWxPvtUtilItem(); // 初始化 virtual void initUI(); // 传递参数 virtual void setInfos(QString sFluidType, QString sPhaseType, QString sPara); // 设置选项,从外界 virtual void selectMethod(QString s); // 设置关联 virtual void setBindInfos(iWxPvtSubHeader* pSubHeader, iWxPvtUtilOption* pUtilOption); // 设置算法载体 virtual void setPvt(iPvtBase* p); // 返回计算结果 virtual float getResult(); // 返回原始的两列数据 virtual bool getRawData(VecFloat& x, VecFloat& y); virtual bool getRawData(VVecVariant& vvec); virtual bool getFixedPtData(float& x, float& y); // 计算点 virtual bool calResultPos(QPointF& pt); virtual bool calReferDbPos(QPointF& pt); // 返回数据 virtual bool getParaValue(QString sPara, float &fValue, QString sUnitDest = ""); virtual void forceMethodChanged(); // 文件标识 virtual QString getFilePvtTag(); protected: // 初始化 virtual void initUI_MainLayout(); virtual void initUI_MethodOptions(); virtual void initUI_MainViews(); virtual QWidget* initUI_Chart(); virtual QWidget* initUI_TableView(); virtual void fillTableViewWithDefault(); virtual void initUI_Others(); virtual void initUI_Others_Btns(QHBoxLayout* pLayoutH); virtual void initUI_Others_Paras(QHBoxLayout* pLayoutH); virtual void changeOthersBtns(QString s); virtual void changeOthersParas(QString s); virtual void fuzzyLayoutWH(int n, int& szW, int& szH); void runDataMatch(); void getMathExps(VecPointF& vec); void updateMatchPlot(VecFloat x, VecFloat y, VecPointF vecExps); void freshPpcs(float fPpc, float fPpcNew = -1.f); // check是否温度模式 virtual void checkIfModeT(); // check是否需要考虑PB压力点 virtual void checkIfPbConsidered(); // 算法有多少种 virtual void dealwithMethods(); // 标题 virtual void dealwithTitles(); // 刷新 virtual void refresh(); virtual void refreshByMethod(QString s); virtual bool refreshByMethod_C(QString s, VecFloat& x, VecFloat& y); //通用方法 virtual bool refreshByMethod_S(QString s, VecFloat& x, VecFloat& y); //特殊方法如Table等 virtual void refreshChart(VVecVariant& vvec); virtual void refreshChart(VecFloat& x, VecFloat& y); virtual void refreshTable(VecFloat& x, VecFloat& y); virtual void refreshHitPoint(); virtual void clearChart(); // 表格数据改变 virtual void freshChartByTableChange(); // Const数据改变 virtual void freshChartByConstChange(); // 显示常数部分 virtual void showConstAbouts(bool bVisible); // 表格只读 virtual void setTableEditable(bool bEditable); // 获取当前选中的方法在算法类中的类型(剔除Table、Const等特殊) virtual int getMethodSubType(); // 根据不同方法,对算法类赋值 virtual void setMemberValuesOfAlgo(); // 获取x方向数据 virtual void getVecX(VecFloat& x); // 计算点 virtual float calResultPosY(float fX, QString sMethod); // 辅助信息 virtual void dealwithDesc(); protected: virtual void paintEvent(QPaintEvent*); virtual void resizeEvent(QResizeEvent*); virtual void onSerialize(ZxSerializer* ser); virtual void onDeserialize(ZxSerializer* ser); public slots: virtual void slotMainHeaderOptionChanged(); virtual void slotMethodChanged(); void slotConstValueChanged(QString s); // 表格 void slotTableCellChanged(const QModelIndex&, const QModelIndex&); void slotTableRowChanged(QModelIndexList listOlds, QModelIndexList listNews, QModelIndex index); // match 功能,20210718 void slotBtnEdit(); void slotBtnMatch(); void slotCbxUsePpc(); void slotMatchExpData(VVecVariant& vvecData); // 凝析气参数设置 void slotRatioGPP(); // 选择改变 // vecIndexCbxs:所有勾选的方法 // indexRadio:勾选的主方法 void slotMethodChangedCR(const VecInt vecIndexCbxs, const int indexRadio); signals: void sigMethodSelected(QString sPara, QString sMethod); void sigMemberValueNeeded(iPvtBase*& ); void sigReferPbNeeded(QPointF& pt); void sigTableDataChanged(QString sPara); protected: // FluidType,这是主类型 QString m_sFluidType; // PhaseType,相类型 QString m_sPhaseType; // 当前计算的参数对象,通常英文 QString m_sPara; // 当前参数对象计算方法有几种 QStringList m_listMethods; // 特殊方法的标识,与配置xml文件要对应,而且必须放在列表的最前面 QStringList m_listSpecialMethodTags; //所有 // Radio选项 QVector m_vecRadios; // 布局 QVBoxLayout* m_pMainLayout; // 辅助信息显示 QLabel* m_pLblDesc; // SubHeader iWxPvtSubHeader* m_pSubHeader; // UtilOption iWxPvtUtilOption* m_pUtilOption; // 对应的实体类 iPvtBase* m_pPvt; // 绘图/表格展示 iGuiPlot* m_pWxPlot; ZxTableView* m_pTableView; ZxTableModel* m_pTableModel; // 坐标轴 QString m_sTitleX; QString m_sTitleY; QString m_sUnitX; QString m_sUnitY; // 结果的点 QPointF m_ptResult; QPointF m_ptReferPb; // Const float m_fConst; QVector m_vecConstCtrls; // 是否温度模式 bool m_bModeT; // 是否需要考虑PB压力点 bool m_bReferPbConsidered; // 当前选项 QString m_sLastMethod; // match 功能,20210718 QPushButton* m_pBtnEdit; QPushButton* m_pBtnMatch; QLabel* m_pLblPpcs; QCheckBox* m_pCbxUsePpc; VVecVariant m_vvecExps; //match需要的edit数据 QLineEdit* m_pTbxGPP; QLabel* m_pLblGPP; };