You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nmWTAI-Platform/Include/iGui/iGuiBase/iParaItemCtrl.h

170 lines
5.0 KiB
C

#pragma once
#include <QWidget>
#include "Defines.h"
#include "iGuiBase_global.h"
class iUnitGroup;
class QHBoxLayout;
class QLineEdit;
class QComboBox;
class QLabel;
class iParameter;
class iUnitWxBinder;
class X_GUI_BASE_EXPORT iParaItemCtrl : public QWidget
{
Q_OBJECT
public:
/// @brief 参数系列,自动从后台获取相关信息
/// @param sPara 参数名称,可以是 英文也可以是中文,软件会自动判断
/// @param sParaSrcTag 标识,跟随主对话框走
/// @param pParameter 参数对应的对象体,如果为空,软件会自动判断
/// @param sUnit,当前选取的单位,如果为空,则默认从后台获取
/// @param oValue,当前的数值,如果不传入,则取空
iParaItemCtrl(QString sPara,
QString sParaSrcTag,
QVariant oValue = QVariant(),
QString sUnit = "",
iParameter* pParameter = nullptr);
~iParaItemCtrl();
void initUI();
// 20240530 为了布局方便,增加新的方式。
// 把相关的子项直接存入外部传入的Layout通常是GridLayout之中
// 该函数接口慎用
void initUI2Layout(QGridLayout* pGridLayout, int nRowIndex);
// 一旦启用该方式原先的setVisible要改为setChildVisible
void setChildVisible(bool bVisible);
public:
// 获取数据
QString getPara();
QString getCurTag();
double getCurValue(); //当前界面显示
QString getCurShowValue(); //当前界面显示
QString getCurUnit();
bool setCurValue(double d); //当前界面显示
bool setCurUnit(QString s);
double getBaseValue(); //基于标准单位的数据比例为1
QString getBaseUnit();
int getCbxValue();
// 属性
void setUnitEnable(bool bEnable);
void setUnitEditable(bool bEditable);
void setValueEditable(bool bEditable);
void setShowScale(bool b);
void setStrenchable(bool bStrench);
void setStrenchRatios(QVector<int>& vec);
void setSpacing(int n);
void setMarginLR(int left, int right);
// 子控件
QWidget* getItemEdit();
QWidget* getCbxUnits();
QWidget* getLblUnits();
QWidget* getCbxItem();
// Parameter
iParameter* getParameter();
// 重新调整单位
// NewLand 工区创建的老的分析中流体界面
// 总是没有单位,暂时没有找到原因,只得特殊处理
void resetUnits();
// 设置比例
void adjustStrench();
// 输入检测
bool isInputOk();
signals:
void sigUnableSP(bool&);
void sigValueChanged(QString sPara, QVariant o);
private:
// 单位
void fillUnitWx();
public:
// 对于文本框的范围及颜色管理
void checkAndClr();
// 数据范围
QString getScaleStr();
static QString getScaleStrOf(QString sPara, \
QString sParaSrcTag, \
QString sCurUnit = "", \
iUnitGroup* pUnitGroup = nullptr);
static QString getScaleStrOf(iParameter* pParameter, \
QString sCurUnit = "", \
iUnitGroup* pUnitGroup = nullptr);
QVector<int> getStrenchRatios();
void freshTips();
private slots:
void slotTextChanged(QString s);
void slotCbxIndexChanged(int index);
void slotTextStrChanged();
protected slots:
/// @brief 对于参数/单位绑定的情形,数据编辑,允许外部进行判断是否合理
/// @param sPara 具体哪个参数,英文标识
/// @param baseValue 基准数值,并非显示数值
/// @param bValid 是否有效的数值,返回值
virtual void slotValidateParaInput(const QString sPara, const double baseValue, bool& bValid);
private:
QLabel* m_pItemTag; //标签
//QWidget* m_pItemEdit;
QLineEdit* m_pItemEdit; //编辑框
QComboBox* m_pCbxItemEdit;
QComboBox* m_pCbxUnits; //单位下拉
QLabel* m_pLblUnits; //单位显示
QLabel* m_pLblScale; //范围
QComboBox* m_pCbxItemType;//边界类型/或其它类型的下拉
QString m_sPara; //参数名称,可以是 英文也可以是中文,软件会自动判断
double m_dRawValue; //原始值
QString m_sRawUnit; //原始单位
int m_nDigit; //小数位数
iUnitGroup* m_pUnitGroup;//载体
iParameter* m_pParameter;
bool m_bUnitEnable; //单位是否只读
bool m_bUnitEditable; //单位是否可以下拉切换
bool m_bValueEditable; //数值是否可以人工修改
bool m_bShowScale; //是否显示范围
int m_nSpacing; //组件之间的间隔
int m_nMarginL; //整体的左侧偏移(边界)
int m_nMarginR; //整体的右侧偏移(边界)
bool m_bStrench; //是否启用Strench如果为false则不启用
QVector<int> m_vecStreches;//如果启用strench采用的数值
iUnitWxBinder* m_pUnitBinder;
QString m_sParaSrcTag;
};