Skip to content

EInput

EInput 是一个支持焦点变色与阴影效果的输入框组件,提供良好的用户交互体验。

基本用法

qml
import "components" as Components

Components.ETheme {
    id: theme
}

Components.EInput {
    width: 300
    placeholderText: "请输入用户名"
    text: ""
    onTextChanged: console.log("输入内容:", text)
}

属性

属性名类型默认值描述
textstring""输入框当前文本内容
placeholderTextstring""占位符文本
widthreal280输入框宽度
heightreal48输入框高度
radiusreal8输入框圆角半径
backgroundColorcolortheme.surfaceColor输入框背景颜色
borderColorcolortheme.outlineColor输入框边框颜色
borderWidthreal1输入框边框宽度
textColorcolortheme.textPrimaryColor输入框文本颜色
placeholderColorcolortheme.textDisabledColor占位符文本颜色
focusColorcolortheme.primaryColor获得焦点时的边框颜色
errorColorcolortheme.errorColor错误状态时的边框颜色
shadowEnabledbooltrue是否启用阴影效果
focusShadowEnabledbooltrue获得焦点时是否增强阴影效果
passwordEchoModeenumTextInput.Normal密码输入模式,可选值:Normal, Password, NoEcho, PasswordEchoOnEdit
readOnlyboolfalse是否只读
enabledbooltrue是否启用
validatorvalidatornull输入验证器
inputMaskstring""输入掩码
maxLengthint0最大输入长度,0表示无限制

方法

方法名参数返回值描述
clear()void清除输入框内容
selectAll()void全选输入框内容
setFocus()void使输入框获得焦点
setError(error)error: boolvoid设置输入框错误状态

信号

信号名参数描述
textChangedtext: string文本内容变化时触发
editingFinished编辑完成时触发(按下Enter或失去焦点)
returnPressed按下Enter键时触发
focusChangedfocused: bool焦点状态变化时触发
errorChangederror: bool错误状态变化时触发

示例

不同类型的输入框

qml
ColumnLayout {
    spacing: 16
    
    // 普通文本输入
    Components.EInput {
        width: 300
        placeholderText: "请输入用户名"
    }
    
    // 密码输入
    Components.EInput {
        width: 300
        placeholderText: "请输入密码"
        passwordEchoMode: TextInput.Password
    }
    
    // 带验证器的邮箱输入
    Components.EInput {
        width: 300
        placeholderText: "请输入邮箱"
        validator: RegExpValidator {
            regExp: /^[^\s@]+@[^\s@]+\.[^\s@]+$/
        }
    }
    
    // 只读输入框
    Components.EInput {
        width: 300
        text: "只读内容"
        readOnly: true
    }
    
    // 错误状态输入框
    Components.EInput {
        id: errorInput
        width: 300
        placeholderText: "请输入内容"
        onEditingFinished: {
            if (text.length < 5) {
                errorInput.setError(true)
            } else {
                errorInput.setError(false)
            }
        }
    }
}

带图标的输入框

qml
RowLayout {
    width: 300
    spacing: 8
    
    // 图标
    Text {
        text: "\uf007"  // 用户图标
        font.family: "Font Awesome 6 Free Solid"
        font.pointSize: 18
        color: theme.textSecondaryColor
        Layout.alignment: Qt.AlignVCenter
    }
    
    // 输入框
    Components.EInput {
        width: parent.width - 40
        placeholderText: "用户名"
        background: Rectangle {
            color: theme.surfaceColor
            radius: 8
        }
    }
}

注意事项

  • 输入框的焦点效果会自动适应主题的颜色变化
  • 使用验证器时,输入内容会实时验证
  • 密码输入模式支持不同的显示方式,可根据需求选择
  • 建议在表单中使用时,结合错误状态提示用户输入是否正确

使用 VitePress 构建