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

235 lines
6.6 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 PaiLineEdit.h
* @brief PaiLineEdit是P.A.I系统定制发布的单行文本框控件
* @date 2011-10-21
*/
#ifndef PAI_FRAME_WIDGET_PAILINEEDIT_H
#define PAI_FRAME_WIDGET_PAILINEEDIT_H
#include <QLineEdit>
#include "Turtle.h"
class QTimer;
class QPushButton;
namespace pai
{
class SmartCompleter;
namespace gui
{
/**
* @class PaiLineEdit
* @brief P.A.I系统定制发布的单行文本框控件,用户可以方便地设置密码风格,错误风格和搜索框风格
*/
class PAI_WIDGET_EXPORT PaiLineEdit : public QLineEdit
{
Q_OBJECT
public:
/**
* @enum PromptType
* @brief 不同模式下文字显示的颜色和图标不同
*/
enum PromptType
{
PT_NULL, ///< 无提示信息
PT_Information, ///< 普通信息
PT_Question, ///< 疑问信息
PT_Warning, ///< 警告信息
PT_Error ///< 错误信息
};
/**
* @brief 构造函数
* @param[in] pParent 父窗口句柄
*/
PaiLineEdit(QWidget *pParent = NULL);
/**
* @brief 构造函数
* @param[in] text 单行文本框里的文本初始值
* @param[in] pParent 父窗口句柄
*/
PaiLineEdit(const QString & text, QWidget *pParent = NULL);
~PaiLineEdit();
/**
* @brief 设置校验器的错误提示
* @param[in] validateFailure 校验器的错误提示
*/
void SetValidatorFailureMessage(const QString & validateFailure);
/**
* @brief 设置超出最大长度的错误提示
* @param[in] exceedMaxLength 超出最大长度的错误提示
*/
void SetExceedMaxLengthMessage(const QString & exceedMaxLength);
/**
* @brief 当输入框内没有文字的时候显示该提示信息
* @param[in] text 提示信息
* @note 请勿使用基类的 setPlaceholderText()
*/
void setPlaceholderText(const QString & text);
/**
* @brief 获得 placeholder 信息
* @return 文本
*/
QString placeholderText() const;
/**
* @brief 显示提示信息
* @param[in] message 输入需显示的信息
* @param[in] type 输入需显示的错误表示
*/
virtual void ShowPromptMessge(const QString & message, PromptType type = PT_Information);
/**
* @brief 输入框是否为空
* return true 空 false 非空
*/
bool IsEmpty();
/**
* @brief 设置输入字符后多长时间没有响应就认为编辑停止
* @param[in] duration 持续时间毫秒当前默认300毫秒
* @note 如果过编辑完成,则同时立即认为编辑停止,不再等待
* 如需等待搜索结果再响应returnPressed或editFilished等信号
* 请将该值设为60ms以下根据测试人从输入字符到按回车键的间隔在60ms以下
*/
void SetEditStopDuration(int duration);
/**
* @brief 设置模糊匹配Completer
* @param[in] pComleter 模糊匹配Completer的指针
*/
void SetSmartCompleter(pai::SmartCompleter *pComleter);
/**
* @brief 得到当前模糊匹配Completer
*/
pai::SmartCompleter *SmartCompleter() const;
protected:
/**
* @brief 向文本框的右侧设置搜索按钮
* @param[in] iconPath icon路径
*/
void SetRightIcon(const QString & iconPath);
/**
* @brief 检验输入的是否合法并显示警告信息
* @param[in] inputText 输入的字符串
*/
void CheckInput(const QString & inputText);
/**
* @brief 重写mousePressEvent
* @param[in] pEvent 鼠标按压事件
*/
virtual void mousePressEvent(QMouseEvent *pEvent);
/**
* @brief 设置LineEdit 的宽度
* @return 控件的宽度和高度
*/
virtual QSize sizeHint() const;
/**
* @brief 重新实现该函数来添加额外的元素
* @param[in] pEvent 重绘事件
*/
virtual void paintEvent(QPaintEvent *pEvent);
/**
* @brief 重新keyReleaseEvent函数 为了实现输入非法字符,提示警告信息
* @param[in] pEvent 键盘释放事件
*/
virtual void keyReleaseEvent(QKeyEvent *pEvent);
/**
* @brief keyPressEvent函数 为了实现输入非法字符,提示警告信息
* @param[in] pEvent 键盘按压事件
*/
virtual void keyPressEvent(QKeyEvent *pEvent);
/**
* @brief 重写inputMethodEvent函数 为了实现输入非法字符,提示警告信息
* @param[in] pEvent 输入方式事件
*/
virtual void inputMethodEvent(QInputMethodEvent *pEvent);
/**
* @brief 重写contextMenuEvent函数 为了实现输入字符长度大于100时提示警告信息
* @param[in] pEvent 上下文菜单事件
*/
virtual void contextMenuEvent(QContextMenuEvent *pEvent);
private:
/**
* @brief 初始化控件
*/
void Init();
/**
* @brief 处理键盘上下键和回车键的操作
* @param[in] key 键盘上被按的方向键
*/
void DealDirectionKey(int key);
private slots:
/**
* @brief 文本编辑完成
*/
void TextEditingFinished();
/**
* @brief 编辑停止超过固定秒后发送停止信号,时间间隙可由SetEditStopDuration(...)函数设置
*/
void EmitEditingStoped();
/**
* @brief FuzzyComleter的响应
*/
void InsertCompletion(const QString &completion);
protected:
QString m_PlaceholderText; ///< Placeholder文本
QString m_PromptMessage; ///< 提示信息
QString m_ValidateMessage; ///< 校验信息
QString m_ExceedMaxLengthMessage; ///< 过长信息
PromptType m_PromptType; ///< 提示类型
QTimer *m_pDelayTimer; ///< 用于检查是否停止编辑
QPushButton *m_pRightPBtn; ///< 按钮
pai::SmartCompleter *m_pCompleter; ///< 模糊匹配的
signals:
/**
* @brief 文本编辑完成
* @param[in] text 当前文本
*/
void EditingFinished(const QString & text);
/**
* @brief 编辑停止
* @note 如果过编辑完成,则同时立即发射该信号,不再等待
* 如需等待搜索结果再响应returnPressed或editFilished等信号
* 请将该值设为60ms以下根据测试人从输入字符到按回车键的间隔在60ms以下
* @param[in] text 当前文本
*/
void EditingStoped(const QString & text);
/**
* @brief 右边的按钮被点击后触发的信号
*/
void RightIconClicked();
/**
*@brief 点击鼠标发出此信号
*/
void LeftMousePress();
};
}
}
#endif ///< PAI_FRAME_WIDGET_PAILINEEDIT_H