QLineEdit是一个单行文本编辑控件。
使用者可以通过很多函数,输入和编辑单行文本,比如撤销、恢复、剪切、粘贴以及拖放等。
通过改变 QLineEdit 的 echoMode() ,可以设置其属性,比如以密码的形式输入。
文本的长度可以由 maxLength() 限制,可以通过使用 validator() 或者 inputMask() 可以限制它只能输入数字。
我们可以使用 setText() 或者 insert() 改变其中的文本,通过 text() 获得文本,通过 displayText() 获得显示的文本,使用 setSelection() 或者 selectAll() 选中文本,选中的文本可以通过cut()、copy()、paste()进行剪切、复制和粘贴,使用 setAlignment() 设置文本的位置。
文本改变时会发出 textChanged() 信号;如果不是由 setText() 造成文本的改变,那么会发出 textEdit() 信号;鼠标光标改变时会发出 cursorPostionChanged() 信号;当返回键或者回车键按下时,会发出 returnPressed() 信号。
当编辑结束,或者 LineEdit 失去了焦点,或者当返回/回车键按下时,editFinished() 信号将会发出。
与 QLineEdit 相关的一个类是 QTextEdit,它允许多行文字以及富文本编辑。
setPlaceholderText()设置提示文字
搜索输入框,没有输入任何字符时,显示“电影、影人、影院、电视剧”这些占位文字,对用户输入作相关提示。
echoLineEdit->setPlaceholderText("电影、影人、影院、电视剧");
setEchoMode()设置模式
淘宝登录界面的一部分,用户名可以直接看到,密码一般都用小黑点掩盖。
switch (index) {case 0:// 默认,输入什么即显示什么echoLineEdit->setEchoMode(QLineEdit::Normal);break;case 1:// 密码,一般是用小黑点覆盖你所输入的字符echoLineEdit->setEchoMode(QLineEdit::Password);break;case 2:// 编辑时输入字符显示输入内容,否则用小黑点代替echoLineEdit->setEchoMode(QLineEdit::PasswordEchoOnEdit);break;case 3:// 任何输入都看不见(只是看不见,不是不能输入)echoLineEdit->setEchoMode(QLineEdit::NoEcho);
}
setAlignment()设置文本位置
switch (index) {case 0:alignmentLineEdit->setAlignment(Qt::AlignLeft);break;case 1:alignmentLineEdit->setAlignment(Qt::AlignCenter);break;case 2:alignmentLineEdit->setAlignment(Qt::AlignRight);
}
setReadOnly()设置能否编辑
switch (index) {case 0:accessLineEdit->setReadOnly(false);break;case 1:accessLineEdit->setReadOnly(true);
}
setValidator()对输入进行限制
这种方式的实质是通过正则表达式限制输入的内容
switch (index) {case 0:// 无限制validatorLineEdit->setValidator(0);break;case 1:// 只能输入整数validatorLineEdit->setValidator(new QIntValidator(validatorLineEdit));break;case 2:// 实例,只能输入-180到180之间的小数,小数点后最多两位(可用于限制经纬度等)QDoubleValidator *pDfValidator = new QDoubleValidator(-180.0, 180.0 , 2, validatorLineEdit);pDfValidator->setNotation(QDoubleValidator::StandardNotation);validatorLineEdit->setValidator(pDfValidator);
}
setInputMask()对输入进行限制
通过限制格式限制输入,具体怎么格式化可以参考Qt助手。
switch (index) {case 0:inputMaskLineEdit->setInputMask("");break;case 1:inputMaskLineEdit->setInputMask("+99 99 99 99 99;_");break;case 2:inputMaskLineEdit->setInputMask("0000-00-00");inputMaskLineEdit->setText("00000000");inputMaskLineEdit->setCursorPosition(0);break;case 3:inputMaskLineEdit->setInputMask(">AAAAA-AAAAA-AAAAA-AAAAA-AAAAA;#");
}
setMaxLength()设置可以输入的最多字符数
// 最多只能输入9个字符
echoLineEdit->setMaxLength(9);
validator和inputmask的结合
比如纬度用 “度:分:秒” 的格式表示,分和秒的范围都是 00-59,度的范围是 -89 到 89。
QRegExp rx("(-|\\+)?[0-8]\\d:[0-5]\\d:[0-5]\\d");
echoLineEdit->setValidator(new QRegExpValidator(rx, echoLineEdit));
echoLineEdit->setInputMask("#00:00:00;0");
echoLineEdit->setText("+00:00:00");
如果不控制输入,那么必须在输入后检查输入是否合法,但控制输入后的输入肯定是合法的,可以省去检查合法的繁琐步骤。只需使用正则表达式控制输入的度分秒范围,然后控制输入的格式。
QLineEdit *pIPLineEdit = new QLineEdit(this);
QLineEdit *pMACLineEdit = new QLineEdit(this);
QLineEdit *pDateLineEdit = new QLineEdit(this);
QLineEdit *pLicenseLineEdit = new QLineEdit(this);pIPLineEdit->setInputMask("000.000.000.000;_");
pMACLineEdit->setInputMask("HH:HH:HH:HH:HH:HH;_");
pDateLineEdit->setInputMask("0000-00-00");
pLicenseLineEdit->setInputMask(">AAAAA-AAAAA-AAAAA-AAAAA-AAAAA;#");
LineEdit 的Qss
QLineEdit{border: 1px solid #ABCDA0; /* 边框宽度为1px,颜色为#A0A0A0 */border-radius: 3px; /* 边框圆角 */padding-left: 5px; /* 文本距离左边界有5px */background-color: #F2F2F2; /* 背景颜色 */color: black; /* 文本颜色 */selection-background-color: #A0A0A0; /* 选中文本的背景颜色 */selection-color: #F2F2F2; /* 选中文本的颜色 */font-family: "Microsoft YaHei"; /* 文本字体族 */font-size: 10pt; /* 文本字体大小 */
}QLineEdit:hover { /* 鼠标悬浮在QLineEdit时的状态 */border: 1px solid #298DFF;border-radius: 3px;background-color: #F2F2F2;color: #298DFF;selection-background-color: #298DFF;selection-color: #F2F2F2;
}QLineEdit[echoMode="2"] { /* QLineEdit有输入掩码时的状态 */lineedit-password-character: 9679;lineedit-password-mask-delay: 2000;
}QLineEdit:disabled { /* QLineEdit在禁用时的状态 */border: 1px solid #CDCDCD;background-color: #CDCDCD;color: #B4B4B4;
}QLineEdit:read-only { /* QLineEdit在只读时的状态 */background-color: #CDCDCD;color: #F2F2F2;
}