logplus/Workflow/WFWidget/include/PaiTableWidget.h
2026-01-17 12:55:45 +08:00

209 lines
5.7 KiB
C++
Raw 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 PaiTableWidget.h
* @brief PaiTableWidget 是P.A.I系统定制发布的表格控件
* @date 2012-04-27
*/
#ifndef PAI_FRAME_WIDGET_PAITABLEWIDGET_H
#define PAI_FRAME_WIDGET_PAITABLEWIDGET_H
#include <QTableWidget>
#include <QContextMenuEvent>
#include "Turtle.h"
class QCheckBox;
namespace pai
{
namespace gui
{
/**
* @class PaiTableWidget
* @brief PaiTableWidget 是P.A.I系统定制发布的表格控件
*/
class PAI_WIDGET_EXPORT PaiTableWidget : public QTableWidget
{
Q_OBJECT
public:
/**
* @brief 构造函数
* @param[in] pParent 父窗口句柄
*/
PaiTableWidget(QWidget *pParent = NULL);
/**
* @brief 析构函数
*/
virtual ~PaiTableWidget();
/**
* @brief 表格高度自增加,不会出现滚动条
* @param[in] ok 是否自动增加
* @param[in] maxRowCount 当行数超过该数字时高度不再增加,出现滚动条
*/
void SetAutoHeight(const bool ok, const int maxRowCount = 10);
/**
* @brief 删除多行
* @param[in] rowIndex 从该行开始删除
* @param[in] count 删除的行数, 如果越界将到最大行时终止
*/
void RemoveRows(const int rowIndex, const int count);
/**
* @brief 删除所有行
*/
void RemoveRows();
/**
* @brief 设置是否显示单元格边框
* @param[in] horizontalLine 水平方向线
* @param[in] verticalLine 垂直方向线
*/
virtual void setShowGrid(bool horizontalLine, bool verticalLine);
/**
* @brief 设置表格的提示信息
* @param[in] message 提示信息
*/
void ShowPromptMessage(const QString & message);
/**
* @brief 设置当表格内容为空时要显示的提示字符串
* @param[in] message 提示信息
*/
void SetFilterEmptyMessage(const QString & message);
/**
* @brief 设置是否可以在表格上可以有选择行的显示某些列的功能
* @param[in] selectable 是否打开该功能
*/
void SetColumnVisibleSelectable(bool selectable);
/**
* @brief 设置不可以被隐藏的列
* @param[in] columnList 不可以被隐藏的列的名字列表
*/
void SetUnselectableColumns(const QStringList & columnList);
/**
*@brief 恢复记录的非隐藏表头
*/
void RecallMemberedSections();
/**
* @brief 设置是否可选中列,如果可选中则会在指定列的左侧添加一个CheckBox.(只可作用于水平表头)
* @param[in] logicalIndex 目标列的逻辑索引
* @param[in] checkable 是否可选中
* @param[in] pCheckBox 需要添加的CheckBox如果checkable为false则可不传递此参数。
*/
void SetColumnCheckable(const int logicalIndex, const bool checkable, QCheckBox *pCheckBox = NULL);
public slots:
/**
* @brief 根据关键字搜索
* @param[in] keyword 搜索的关键字
* @param[in] column 要搜索的列
*/
void Filter(const QString & keyword, int column = 0);
/**
* @brief 根据关键字搜索
* @param[in] keyword 搜索的关键字
* @param[in] columns 要搜索的列
* @param[in] ignoreLines 忽略搜索的行
*/
void Filter(const QString & keyword, QList<int> columns, QList<int> ignoreLines = QList<int>());
/**
* @brief 重写添加列函数使及时调整HeaderView的CheckBox
* @param[in] column 要插入的列位置
*/
void insertColumn(int column);
/**
* @brief 重写移除列函数使及时调整HeaderView的CheckBox
* @param[in] column 要删除的位置
*/
void removeColumn(int column);
protected:
/**
* @brief 按照上一次的过滤规则,对某一行惊醒过滤
* @param[in] rowIndex 要过滤的行索引
* @return 是否通过过滤
*/
virtual bool Filter(int rowIndex);
/**
* @brief 实现该函数用来写字符串
* @param[in] pEvent 绘制事件
*/
virtual void paintEvent(QPaintEvent *pEvent);
/**
* @brief 实现鼠标右键菜单
* @param[in] pEvent 右键菜单事件
*/
virtual void contextMenuEvent(QContextMenuEvent *pEvent);
/**
* @brief 实现快捷键功能
* @param[in] pEvent 键盘按压事件
*/
virtual void keyPressEvent(QKeyEvent *pEvent);
private:
/**
* @brief 记录非隐藏表头
*/
void RememberCurrentSections();
private slots:
/**
* @brief 重新设置高度以适应自动变化
*/
void ResetTableHeight();
/**
* @brief 行数发生变化
*/
void RowCountChanged();
/**
* @brief 设置剪切板内容
*/
void SetClipboard();
/**
* @brief 当单元格的数据发送改变室的槽函数
* @param[in] pItem 对应的单元格
*/
void TableItemChanged(QTableWidgetItem *pItem);
protected:
QString m_FilterKeyword; ///< 最近一次过滤的关键字
private:
bool m_AutoHeight; ///< 自动调整高度
bool m_ShowFilterEmptyMessage; ///< 显示搜索空提示
int m_AutoHeightMaxRowCount; ///< 最大行数
QString m_MessageWhileFilterEmpty; ///< 空提示文本
QString m_PromptMessage; ///< 提示文本
QList<int> m_FilterColumns; ///< 最近一次过滤的的列
QList<int> m_IgnoreLines; ///< 最近一次忽略搜索的行
int m_IgnoreHeight; ///< 忽略行的高度,用于显示提示信息
signals:
/**
* @brief 行数发生变化
* @param[in] count 变化后的行数
*/
void RowCountChanged(const int count);
};
}
}
#endif ///< PAI_FRAME_WIDGET_PAITABLEWIDGET_H