输入框控件
输入框控件
UIGQLineEdit 是 WidgetKit 的单行文本输入控件,用于搜索框、表单输入、密码输入、快捷键输入和参数编辑。
输入框控件支持按状态配置背景和文字样式,支持 placeholder 文本样式,支持密码模式和快捷键录入模式。
常见状态
- 默认状态(Normal)
- 鼠标悬停状态(Hot)
- 获得焦点状态(Pressed)
- 禁用状态(Disable)
C++ 使用
UIGQLineEdit* edit = new UIGQLineEdit(parent);
edit->setObjectName("searchEdit");
edit->setThemeName(UIG_THEME_LINE_EDIT);
edit->setText("");
edit->setPlaceholderText("搜索");
edit->setEditMargin(8, 8, 12, 12);
密码输入:
edit->setIsPassword(true);
快捷键输入:
edit->setHotkeyMode(true);
快捷键模式下,用户按下 Ctrl、Alt、Shift 与字母组合时,控件会把组合键写入文本;按 Delete 或 Backspace 会清空文本。
类继承关系
QWidget
└─ QLineEdit
└─ UIGQLineEdit
IUIGQWidgetBase
└─ UIGQLineEdit
UIGQLineEdit 同时继承 Qt 的 QLineEdit 和 WidgetKit 的 IUIGQWidgetBase。因此它既可以使用 Qt 标准输入框能力,例如 setText(...)、textChanged 信号、setEchoMode(...),也可以使用 WidgetKit 的主题、布局和 JSON 序列化能力。
内部实现上,每个 UIGQLineEdit 持有一个 UIGQWidgetBase 基础控制对象和一个 UIGQLineEditImpl 绘制实现对象:
| 类型 | 作用 |
|---|---|
QLineEdit |
Qt 标准单行输入框基类,提供文本输入、光标、选择、焦点和输入事件。 |
IUIGQWidgetBase |
WidgetKit 控件统一接口,提供主题名、布局策略、JSON 读写等能力。 |
UIGQWidgetBase |
控件通用数据对象,保存布局、主题、透明度等基础属性。 |
UIGQLineEditImpl |
输入框专用实现,负责背景、文字、placeholder、密码模式、快捷键模式和属性读写。 |
控件接口说明
构造
| 接口 | 说明 | 参数 | 返回值 |
|---|---|---|---|
UIGQLineEdit(QWidget* parent = nullptr) |
创建单行输入控件。 | parent:父控件,可为空。 |
控件实例 |
主题和序列化
| 接口 | 说明 | 参数 | 返回值 |
|---|---|---|---|
void setThemeName(const QString& themeName) |
设置主题名。常用值为 UIG_THEME_LINE_EDIT。 |
themeName:主题配置名称。 |
void |
QString getThemeName() const |
获取当前主题名。 | 无 | QString |
bool readJsonValue(void* value) |
从配置对象读取控件属性。通常由页面加载或设计器调用。 | value:指向配置对象。 |
bool |
bool serializeJsonValue(Json::Value* value, bool bRead = true) |
读写控件可序列化属性。 | value:配置对象;bRead:是否读取。 |
bool |
QString jsonData() const |
获取设计器属性字符串。 | 无 | QString |
void setJsonData(const QString& data) |
设置设计器属性字符串,并在首次设置时读取配置。 | data:属性字符串。 |
void |
背景和状态样式
| 接口 | 说明 | 参数 | 返回值 |
|---|---|---|---|
void setBackground(CtrlState state, const FillStyle& style) |
设置某个状态的背景样式。state 可传 UIG_NORMAL、UIG_HOT、UIG_PRESSED、UIG_DISABLE。 |
state:控件状态;style:背景填充样式。 |
void |
const FillStyle& getBackground(CtrlState state) |
获取某个状态的背景样式。 | state:控件状态。 |
const FillStyle& |
void setTextStyle(CtrlState state, const TextStyleDesc& style) |
设置某个状态的输入文字样式。设置 UIG_NORMAL 时会立即应用字体和颜色。 |
state:控件状态;style:文字样式描述。 |
void |
const TextStyleDesc& getTextStyle(CtrlState state) |
获取某个状态的输入文字样式。 | state:控件状态。 |
const TextStyleDesc& |
void setPlaceholderTextStyle(CtrlState state, const TextStyleDesc& style) |
设置 placeholder 文本样式。当前实现使用一份 placeholder 样式,state 参数用于保持接口一致。 |
state:控件状态;style:placeholder 文字样式。 |
void |
const TextStyleDesc& getPlaceholderTextStyle(CtrlState state) |
获取 placeholder 文本样式。 | state:控件状态。 |
const TextStyleDesc& |
文本和输入模式
| 接口 | 说明 | 参数 | 返回值 |
|---|---|---|---|
void setText(const QString& text) |
Qt 标准接口,设置输入框文本。 | text:输入框文本。 |
void |
QString text() const |
Qt 标准接口,获取输入框文本。 | 无 | QString |
void setPlaceholderText(const QString& text) |
设置 placeholder 文本。WidgetKit 自绘 placeholder,不依赖 Qt 原生 placeholder 绘制。 | text:placeholder 文本。 |
void |
const QString& getPlaceholderText() |
获取 placeholder 文本。 | 无 | const QString& |
void setIsPassword(bool password) |
设置密码模式。启用后会禁用右键菜单,并使用 QLineEdit::Password 回显模式。 |
password:是否启用密码模式。 |
void |
bool getIsPassword() |
获取是否为密码模式。 | 无 | bool |
void setHotkeyMode(bool hotkeyMode) |
设置快捷键录入模式。 | hotkeyMode:是否启用快捷键录入。 |
void |
bool getHotkeyMode() |
获取是否为快捷键录入模式。 | 无 | bool |
void setEditMargin(int top, int bottom, int left, int right) |
设置输入内容边距。 | top/bottom/left/right:内容边距。 |
void |
void getEditMargin(int& top, int& bottom, int& left, int& right) |
获取输入内容边距。 | top/bottom/left/right:输出内容边距。 |
void |
WidgetKit 通用布局接口
| 接口 | 说明 | 参数 | 返回值 |
|---|---|---|---|
void setLayoutRatio(int ratio) |
设置布局比例值。用于比例布局。 | ratio:空间占比权重。 |
void |
int getLayoutRatio() const |
获取布局比例值。 | 无 | int |
void setWidthPolicy(LayoutSizePolicy policy) |
设置宽度策略。常用值为 UIG_SIZE_AUTO、UIG_SIZE_FILL、UIG_SIZE_FIXED。 |
policy:宽度策略枚举。 |
void |
LayoutSizePolicy getWidthPolicy() const |
获取宽度策略。 | 无 | LayoutSizePolicy |
void setHeightPolicy(LayoutSizePolicy policy) |
设置高度策略。 | policy:高度策略枚举。 |
void |
LayoutSizePolicy getHeightPolicy() const |
获取高度策略。 | 无 | LayoutSizePolicy |
void setAbsoluteLayout(bool absoluteLayout) |
设置是否使用绝对布局。 | absoluteLayout:是否启用绝对布局。 |
void |
bool getAbsoluteLayout() const |
获取是否使用绝对布局。 | 无 | bool |
void setAbsoluteDock(DockLayoutType hor, DockLayoutType ver, int offsetX = 0, int offsetY = 0) |
设置绝对停靠位置和偏移。 | hor:水平停靠;ver:垂直停靠;offsetX/offsetY:偏移量。 |
void |
void getAbsoluteDock(DockLayoutType& hor, DockLayoutType& ver, int& offsetX, int& offsetY) const |
获取绝对停靠位置和偏移。 | hor/ver/offsetX/offsetY:输出停靠与偏移。 |
void |
void setOpacity(int alpha) |
设置控件透明度,范围 0-255。 |
alpha:透明度值。 |
void |
int getOpacity() const |
获取控件透明度。 | 无 | int |
void resizeWidget() |
根据 WidgetKit 布局数据重新计算控件尺寸和位置。 | 无 | void |
常用信号
| 信号 | 说明 | 参数 | 返回值 |
|---|---|---|---|
void textChanged(const QString& text) |
Qt QLineEdit 标准信号,文本变化时触发。 |
text:变化后的文本。 |
void |
void editingFinished() |
Qt QLineEdit 标准信号,编辑结束时触发。 |
无 | void |
void returnPressed() |
Qt QLineEdit 标准信号,按下回车时触发。 |
无 | void |
主题样式建议
输入框背景、边框、文字、placeholder 样式建议放到主题中维护。业务代码只负责设置文本、placeholder、密码模式、快捷键模式和边距。
使用建议
- 表单输入框优先通过
setThemeName(UIG_THEME_LINE_EDIT)绑定主题,不建议在页面代码里硬编码颜色。 - 搜索框可以配合左侧搜索图标容器使用,输入框本身负责输入和 placeholder。
- 密码模式会禁止复制、粘贴、全选等快捷操作,适合敏感输入。
- 快捷键模式适合设置页中的热键录入,不适合作为普通文本输入框使用。