logplus/ModuleConsole/include/ParameterTableWidget.h
2026-01-16 17:18:41 +08:00

390 lines
9.6 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* @file ParameterTableWidget.h
* @brief 参数编辑面板中的表格控件,它对应的数据模型是一个组合的参数项,用户可以添加删除组合参数项中的子参数项
* @date 2011-12-21
* @author sinapec
*/
#ifndef PAI_FRAME_WORKFLOWVIEW_PARAMETERTABLEWIDGET_H
#define PAI_FRAME_WORKFLOWVIEW_PARAMETERTABLEWIDGET_H
#include <QLabel>
#include "ParameterItemControl.h"
#include "PaiTableWidget.h"
class QTableWidget;
class QTableWidgetItem;
class QToolButton;
namespace pai
{
namespace gui
{
class PaiToolButton;
}
}
namespace pai
{
namespace module
{
class CParameterItem;
class CCompositeParameterItem;
class CTableParameterItemDelegate;
}
}
namespace pai
{
namespace graphics2d
{
struct SColumnMetaData
{
QString strColumnName;//该列的名字这个名字也同时是指定行在该列对应参数项的Id)
QString strColumnType;//该列的类型请参考ParameterItem.h中的ParameterType
QString strColumnWidget;//该列的控件类型请参考ParameterItem.h中的ParameterInputType)
QString strColumnWidgetData;//该列的控件的元数据
QString strColumnWidgetState;//该列的控件的状态
QString strColumnDefaultValue;//该列缺省值
};
/**
* @class CParameterTableActionIcon
* @brief 代表删除一行的删除图标
*/
class CParameterTableActionIcon : public QLabel
{
Q_OBJECT
public:
/**
* @brief 构造函数
* @param strIconPath 图标路径
* @param pParent 父窗口句柄
*/
CParameterTableActionIcon(const QString& strIconPath,int iRow,QWidget* pParent=0);
protected:
/**
* @brief 重载该函数使得用户鼠标点击到icon时发送信号。
*/
virtual void mouseReleaseEvent(QMouseEvent *pEvent);
private:
int m_iRow;//行号
signals:
/**
* @brief 激发icon被鼠标点击的信号
*/
void signalIconClicked(int);
};
/**
* @class CParameterTableCombobox
* @brief 该类用来给参数编辑表格控件中的单元格提供下拉框编辑器,编辑的内容同步到相关参数项
*/
class CParameterTableLineEdit: public pai::gui::PaiLineEdit
{
Q_OBJECT
public:
/**
* @brief 构造函数
* @param pParameterItem 相关参数项
* @param pTableItem 相关单元格
* @param pParent 父窗口句柄
*/
CParameterTableLineEdit(pai::module::CParameterItem* pParameterItem,
QTableWidgetItem* pTableItem, QWidget* pParent = 0);
private slots:
/**
* @brief 响应文本框编辑,将编辑后的值同步到相关参数项
*/
void slotOnEditingFinished();
void slotOnEditingFinished(const QString& text);
protected:
/**
* @brief 实现焦点移出事件
*/
virtual void focusOutEvent (QFocusEvent *pEvent);
private:
pai::module::CParameterItem* m_pParameterItem;
QTableWidgetItem* m_pTableItem;
signals:
/**
*@brief QLineEditor 输入 + - 号失去焦点时发送该信号
*/
void editFocuseOut();
};
/**
* @class CParameterTableCombobox
* @brief 该类用来给参数编辑表格控件中的单元格提供下拉框编辑器,编辑的内容同步到相关参数项
*/
class CParameterTableCombobox: public pai::gui::PaiComboBox
{
Q_OBJECT
public:
/**
* @brief 构造函数
* @param pParameterItem 相关参数项
* @param pTableItem 相关单元格
* @param pParent 父窗口句柄
*/
CParameterTableCombobox(pai::module::CParameterItem* pParameterItem,
QTableWidgetItem* pTableItem, QWidget* pParent = 0);
/**
* @brief 析构函数
*/
virtual ~CParameterTableCombobox();
protected:
/**
* @brief 实现焦点移出事件,在该函数中对值进行补齐
*/
virtual void focusOutEvent (QFocusEvent *pEvent);
private:
/**
* @brief 获取要显示的文本
* @return 要显示的item文本
*/
QStringList GetVisibleText();
/**
* @brief 弹出显示详细列表对话框
* @param[in] 被点击item索引
*/
void ShowMoreDialog(int index);
private slots:
/**
* @brief 响应下拉框编辑,将编辑后的值同步到相关参数项
*/
void slotOnIndexChanged();
/**
* @brief 设置combox和TableWidgetItem的文本
* @param[in] text 要显示文件
*/
void SetText(const QString& text);
private:
pai::module::CParameterItem* m_pParameterItem;
QTableWidgetItem* m_pTableItem;
signals:
void stateChanged();
};
/**
* @class ParamTableWgt
*/
class ParamTableWgt : public pai::gui::PaiTableWidget
{
Q_OBJECT
public:
ParamTableWgt(QWidget* parent = 0);
ParamTableWgt(int rows, int columns, QWidget* parent = 0);
void setError(int row, int column, bool bError = true);
/*
* @brief 实现sizeHint用来获得设计的高度
*/
virtual QSize sizeHint() const;
protected:
/**
* @brief 绘制红色错误边框
*/
void paintEvent(QPaintEvent* pEvent);
private:
int m_row;
int m_col;
bool m_bError;
};
/**
* @class CParameterTableWidget
* @brief 参数编辑面板中的表格控件,它对应的数据模型是一个组合的参数项,用户可以添加删除组合参数项中的子参数项
*/
class CParameterTableWidget:public QFrame,public pai::gui::CParameterItemControl
{
Q_OBJECT
public:
/**
* @brief 构造函数
* @param pCompositeItem 和表格相关联的复合参数项
* @param pParent 父控件句柄
*/
CParameterTableWidget(pai::module::CParameterItem* pCompositeItem, QWidget* pParent=0);
/**
* @brief 析构函数
*/
virtual ~CParameterTableWidget();
/**
* @brief 根据组合参数项的内容初始化表格
* @param[in] pCompositeItem 组合参数项
*/
virtual void SetData(pai::module::CCompositeParameterItem* pCompositeItem);
/**
* @brief 得到内部表格控件的句柄
*/
QTableWidget* GetTable() const;
/**
* @brief 将整个表格转化为一个与根参数项相关连的JSON字符串并返回
*/
QString ToJsonString() const;
/**
* @brief set error message
*/
void setError(const QString &errMsg);
/**
* @brief 根据指定的参数显示或隐藏AddButton
* @param bShow true:显示AddButton,false:隐藏AddButton
*/
void ShowAddButton(bool bShow);
/*
* @brief 实现sizeHint用来获得设计的高度
*/
virtual QSize sizeHint() const;
protected:
/**
* @brief 将控件中显示的值转化成QVariant并返回
*/
virtual QVariant GetDisplayValue() const;
/**
* @brief 将控件对应的值转化成QVariant并返回
*/
virtual QVariant GetValue() const;
/**
* @brief 为控件设置当前显示值
* @param varDisplayValue
*/
virtual void SetDisplayValue(const QVariant& varDisplayValue);
/**
* @brief 为控件设置对应的值
*/
virtual void SetValue(const QVariant& varValue);
/**
* @brief 实现该函数用来重绘边框
*/
virtual void paintEvent(QPaintEvent *pEvent);
protected slots:
/**
* @brief 在表格中添加一行并且向数据模型添加一系列子参数项
*/
virtual void slotOnAddRow();
/**
* @brief 从表格中移除一行并且向数据模型删除一系列子参数项
* @param iRow 行索引
*/
virtual void slotOnRemoveRow(int iRow);
/**
* @brief 选中某一行时将每个单元格的编辑器打开
*/
virtual void slotOnActiveRow();
/**
* @brief 响应CheckBox选中或反选对参数项作相应修改
* @param pCheckItem 带有Checkbox的QTableWidgetItem
*/
virtual void slotOnCheckItem(QTableWidgetItem* pCheckItem);
/**
* @brief 在选中radioButton时选中当前行
* @param[in] toggled radioButton选中状态
*/
void SelectRow(bool toggled);
/**
* @brief 设置radioButton到表格的某单元格
* @param[in] row 行号
* @param[in] col 列号
*/
void SetCellRadioButton(int row, int col);
protected:
int m_iOldSelectRow;
ParamTableWgt* m_pTable;
QToolButton* m_pBtnAdd;
bool m_bBtnAddShouldShow; //用来标定当前是否需要显示添加按钮
pai::module::CCompositeParameterItem* m_pRootItem;
pai::module::CTableParameterItemDelegate* m_pRootItemDelegate;
signals:
void signalOnFinishEditingRowOrCell();
};
/**
* @class SortParamTableWidget
* @brief 十字交叉道集参数面板
*/
class SortParamTableWidget : public CParameterTableWidget
{
Q_OBJECT
public:
SortParamTableWidget(pai::module::CParameterItem* pCompositeItem, QWidget* pParent=0);
virtual ~SortParamTableWidget();
/**
* @brief 根据组合参数项的内容初始化表格
* @param[in] pCompositeItem 组合参数项
*/
virtual void SetData(pai::module::CCompositeParameterItem* pCompositeItem);
protected slots:
/**
* @brief 在表格中添加一行并且向数据模型添加一系列子参数项
*/
virtual void slotOnAddRow();
/**
* @brief 选中某一行时将每个单元格的编辑器打开
*/
virtual void slotOnActiveRow();
/**
* @brief 响应CheckBox选中或反选对参数项作相应修改
* @param pCheckItem 带有Checkbox的QTableWidgetItem
*/
virtual void slotOnCheckItem(QTableWidgetItem* pCheckItem);
/**
* @brief 响应Combox选中状态改变消息使同一行cellWidget可用
*/
void slotOnComboxStateChanged();
protected:
/**
* @brief 获得当前参数项是否为此行的关键参数
*/
virtual bool IsKeyValueItem(int row, int column);
};
}
}
#endif