#pragma once #include "mModuleDefines.h" #include "iDlgBase.h" #include "iResultInfo.h" #include "mToolPvt_global.h" class iParaItemCtrl; class ZxDataWell; class ZxDataObject; class M_TOOL_PVT_EXPORT iWxBase : public iDlgBase { Q_OBJECT public: explicit iWxBase(QWidget *parent = 0); ~iWxBase(); public: // 根据测试类型更改UI(比如多层、干扰等) virtual void adjustUiByTestType(PvtTestType ptt); // 初始化 virtual void initUI(); virtual void setDataWell(ZxDataWell* p); virtual QVector* getVecParaCtrls(); // 组织结果数据,注:vec不进行clear,由调用方自行clear virtual bool organizeResults(QVector& vec, QString sType); virtual bool organizeResultsEx(QStringList& listTags, QStringList& listValues, QString sType, bool bClear = false); // 与序列化关联 virtual bool saveAsByteArr(QByteArray& v); virtual bool loadFromByteArr(QByteArray& v); // 新增接口(与一个数据对象体进行绑定式关联) virtual bool saveAsDataObj(ZxDataObject*& pDataObj); virtual bool loadFromDataObj(ZxDataObject*& pDataObj); int getAwi() { return m_nAwi; } virtual QString getAwiName() { return ""; } public: virtual void onSerialize(ZxSerializer* ser); virtual void onDeserialize(ZxSerializer* ser); // 建立某参数的Layout,考虑单位控件 virtual iParaItemCtrl* createParaCtrl(QString sPara, bool bUnitEditable = true, bool bShowScale = false, bool bStrench = true, VecInt* pVecStrenchRatios = nullptr, int nSpacing = 4, int nMarginL = 20, int nMarginR = 20); // 在pCtrl InitUI之前允许部分调整,如参数跟着模型走的调整 //virtual void adjustParaInfos(iParameter* pParameter); // 从各个Wx(m_vecWxDatas)中遍历查找 virtual bool setParaValue(QString sPara, double d); virtual bool getParaValue(QString sPara, double& d); // 返回所有参数,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 verifyCurInfos(QString& sLog) { return true; } // 在导航模式下,点击下一步时,先判断本步是否正确 virtual bool checkCurWxInputs() { return true; } // 在每次设定时,从上一步获取数值,并且刷新至本窗体 virtual bool getAndFreshByPrevWx() { return true; } signals: // 当参数改变时触发,通知后续窗体 void sigParasChanged(QMap& map); // 返回Anal标识 void sigGetAnalTag(QString& s); // 返回指定Key的数值,方便逐级传递 void sigPrevWxValueOf(QStringList& listParas, QMap& map); // 触发存储/加载 void sigSaveToFile(int nAWI); void sigLoadFromFile(int nAWI); void sigHelp(int nAWI); public slots: virtual void slotGetAnalTag(QString& s) { Q_UNUSED(s); } // 当前面窗体参数改变时,本窗体响应 virtual void slotParasObtained(QMap& map); // 响应ParaCtrl数据的改变 virtual void slotParaCtrlValueChanged(QString sPara, QVariant o); // 与sigPrevWxValueOf对应 virtual void slotValueToNextWx(QStringList& listParas, QMap& map); protected: virtual void paintEvent(QPaintEvent *); // 绘制Log virtual void drawLogInfo(QPainter* painter); // 从当前井获取该参数的数值 bool getValueFromCurWell(QString sPara, QVariant& o); public: /// @brief 根据PvtFluidType判断是否单相 /// @param nPft 是各种相态的组合 static bool isSinglePhase(int nPft); /// @brief 根据PvtFluidType解析出来都有哪些相(单相) /// @param nPft 是各种相态的组合 static VecInt parsePhaseTypes(int nPft); void parseMapValue2Tbx(QMap& map, QString sPara, \ QLineEdit* pTbx, QComboBox* pCbxBinding, \ bool bNumber = true, \ bool bIgnoreIfNotNull = true); void cacheTbxValue2Map(QMap& map, QString sPara, \ QLineEdit* pTbx, QComboBox* pCbxBinding, \ bool bNumber = true, \ bool bIgnoreIfNull = true); protected: // 对于单位类的控件进行管理 QVector m_vecParaCtrls; // 当前井 ZxDataWell* m_pDataWell; // 默认的存储路径,外部传递过来 //QString m_sAnalTag; int m_nAwi; //对于向导子窗体,设定的类型,不涉及序列化,只读,为了方便引用,采用了int类型,实际是枚举 PvtTestType m_oPtt; //当前的测试类型,涉及序列化 };