57常用控件_QLineEdit的属性
目录
代码示例: 录入个人信息
代码示例:使用正则表达式验证输入框的数据
代码示例:验证两次输入的密码一致
代码示例: 切换显示密码
属性 | 说明 |
---|---|
text | 输入框中的文本 |
inputMask | 输入内容格式约束 |
maxLength | 最大长度 |
frame | 是否添加边框 |
echoMode | 显示方式: • QLineEdit::Normal:这是默认值,⽂本框会显⽰输⼊的⽂本。 • QLineEdit::Password :在这种模式下,输⼊的字符会被隐藏, 通常⽤星号(*)或等号(=)代替。 • QLineEdit::NoEcho :在这种模式下,⽂本框不会显⽰任何输⼊ 的字符。 |
cursorPosition | 光标所在位置 |
alignment | 文字对齐方式(水平/垂直方向) |
dragEnabled | 是否允许拖拽 |
readOnly | 是否只读(不允许修改) |
placeHolderText | 输入框为空时的提示信息 |
clearButtonEnabled | 是否显示"清除按钮" |
信号 | 说明 |
---|---|
void cursorPositionChanged(int old, int new) | 当鼠标移动时发出此信号,old 为先前的位置,new 为新位置。 |
void editingFinished() | 当按返回或者回车键时,或者行编辑失去焦点时,发出此信号。 |
void returnPressed() | 当返回或回车键按下时发出此信号。如果设置了验证器,必须要验证通过,才能触发。 |
void selectionChanged() | 当选中的文本改变时,发出此信号。 |
void textChanged(const QString &text) | 当QLineEdit 中的文本改变时,发出此信号,text 是新的文本。代码对文本的修改能够触发这个信号。 |
void textEdited(const QString &text) | 当QLineEdit 中的文本改变时,发出此信号,text 是新的文本。代码对文本的修改不能触发这个信号。 |
这个text属性不仅仅可以通过代码来设置,用户在输入框中进行编辑,也会影响到text值的变化~~
1)通过代码中设置text,界面上的文本会发生改变.
2)直接操作修改界面上的文本(输入框,可以编辑的),text属性的值也会发生改变。很多网站,输入框里都是会限制字数的~~placeHolderText
placeHolder可以起到“提示作用”
当输入框为空的时候,没有任何内容的时候,提示信息才会存在~~
一旦用户在这里进行任何动作输入
这个提示信息就没了~~
clearButtonEnabled
如果输入框为空,此时没有任何的显示
当输入框有内容的时候,右侧就会出现一个删除
一旦用户在输入框中输入内容了~~
会出现按钮,点击按钮就能立即把输入框的所有内容给
清空掉~~
代码示例: 录入个人信息
1)在界面上创建三个输入框和两个单选按钮,一个普通按钮
三个输入框的 objectName 为 lineEdit name,lineEdit password
lineEdit_phone
两个单选按钮的 objectName 为 radioButton_male ,radioButton_female
按钮的 objectName 为 pushButton





inputMask 只能进行简单的输入格式校验
实际开发中,基于正则表达式的方式是更核心的方法
inputMask功能比较有限,只能进行简单的验证.
就需要使用“正则表达式”
计算机中的通用概念,和具体的编程语言无关
正则表达式,本质上就是一个带有特殊字符的字符串.特殊字符用来表示另一个字符串的特征。
此时就可以借助正则表达式来描述出一些具有一定特点的字符串,
基于这些特点,就可以完成字符串的匹配~~
代码示例:使用正则表达式验证输入框的数据
此处要求在输入框中输入一个合法的电话号码(1 开头,11位全都是数字)如果验证不通过,则确定按钮
无法点击。
关于正则表达式
正则表达式是一种在计算机中常用的,使用特殊字符描述一个字符串的特征的机制.在进行字
符串匹配时非常有用
正则表达式的语法还比较复杂,一般都是随用随查,不需要背下来
如果是,则按钮设为可用状态,
如果不是,则设为禁用状态

使用 QRegExp 创建一个正则表达式对象"^1\\d{10}$” 表示"以1开头,后面跟上任意的10
个十进制数字"
使用 QRegExpValidator 创建一个验证器对象,Qt中内置了四个主要的验证器对象

QRegularExpressionValidator 在匹配性能上做出了⼀定优化. 但是从使⽤⻆度讲, 和 QRegExpValidator 差别不⼤. 我们使⽤ QRegExpValidator 即可
3)编写 widget.cpp,给 LineEdit 添加 textEdited 信号的 slot函数
on_lineEdit_textEdited 的参数是当前输入框的内容
通过 LineEdit->validator() 获取到内置的验证器
通过 validate 方法验证文本是否符合要求
●第一个参数填写的是要验证的字符串由于参数要求是 string& 而不是 const
QString&,需要把这个变量复制一下
●第二个参数是一个int&,是输出型参数当验证的字符串不匹配时,返回这个字符串的长度.(没有
啥实质作用).
●返回值是一个枚举,QValidator::Acceptable 表示验证通过
QValidator::Invalid 表示验证不通过
\\d:表示数字(\\不转义,\转义)
4)执行程序,观察效果可以看到此时尝试输入字母是无法输入的.并且只有当输入的内容符合要求,确
定按钮才能被使用
“^1\\d{10}$"
这是一个简单的验证手机号码的正则表达式
^表示以 xxx 开头.
^后面跟着的1,意思就是以1开头
\d表示数字,为了在C++字符串中使用,需要写作\\d
{10}表示前面的内容重复出现10次.\d数字要重复出现10次.
$表示结尾了.
QRegExp regExp("^1\\d{10}$");
ui->lineEdit->setValidator(new QRegExpValidator(regExp));
只是注册一个验证器,具体验证器怎么使用,还需要写其他代码来完成~~
验证输入框的内容,是否合法.
只要输入框中的内容发生改变了,验证操作就应该被执行~~State validate(QString&, int&)
第一个参数,是要验证的字符串.参数类型是QString&
不是 const !!!第二个参数,如果你的字符串不符合规则,是从哪个位置开始不符合的~~
程序员可以自定义一个Validator,重写validate函数.
刚才用的 RegExpValidator 是 Qt 内置的.
代码示例:验证两次输入的密码一致
1)在界面上创建两个输入框和一个 label


(void)arg1;骗过编译器
相同的逻辑可以写在一个函数里compare()

验证两次输入的密码是否一致.
使用textEdited信号,来触发对于两个输入框内容的判定~~QString &arg
△ unused parameter 'arg1'
警告不处理也是完全可以的,
以后在公司中,有的团队可能要求,把警告当成错误一样处理~~(void) arg1;
这个写法就是类型转换
这个写法对于代码的实际逻辑是没有任何影响的。
同时可以“骗过”编译器,警告就没了~~
代码示例: 切换显示密码



