北京市建设工程第四检测所网站,wordpress Suffusion,深圳网站建设新闻,wordpress访问量QLineEdit是一个单行文本编辑控件。 使用者可以通过很多函数#xff0c;输入和编辑单行文本#xff0c;比如撤销、恢复、剪切、粘贴以及拖放等。 通过改变QLineEdit的 echoMode() #xff0c;可以设置其属性#xff0c;比如以密码的形式输入。 文本的长度可以由 maxLength(… QLineEdit是一个单行文本编辑控件。 使用者可以通过很多函数输入和编辑单行文本比如撤销、恢复、剪切、粘贴以及拖放等。 通过改变QLineEdit的 echoMode() 可以设置其属性比如以密码的形式输入。 文本的长度可以由 maxLength() 限制可以通过使用 validator() 或者 inputMask() 可以限制它只能输入数字。在对同一个QLineEdit的validator或者input mask进行转换时最好先将它的validator或者input mask清除以避免错误发生。 与QLineEdit相关的一个类是QTextEdit它允许多行文字以及富文本编辑。 我们可以使用 setText() 或者 insert() 改变其中的文本通过 text() 获得文本通过 displayText() 获得显示的文本使用 setSelection() 或者 selectAll() 选中文本选中的文本可以通过cut()、copy()、paste()进行剪切、复制和粘贴使用 setAlignment() 设置文本的位置。 文本改变时会发出 textChanged() 信号如果不是由setText()造成文本的改变那么会发出textEdit()信号鼠标光标改变时会发出cursorPostionChanged()信号当返回键或者回车键按下时会发出returnPressed()信号。 当编辑结束或者LineEdit失去了焦点或者当返回/回车键按下时editFinished()信号将会发出。 以上是Qt官方文档对QLineEdit的简要说明下面根据个人经验对一些常用的方法作说明
1.setPlaceholderText()设置提示文字 豆瓣电影的搜索输入框没有输入任何字符时显示“电影、影人、影院、电视剧”这些占位文字对用户输入作相关提示。 echoLineEdit-setPlaceholderText(电影、影人、影院、电视剧);
2.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);
}
3.setAlignment()设置文本位置
switch (index) {
case 0:
alignmentLineEdit-setAlignment(Qt::AlignLeft);
break;
case 1:
alignmentLineEdit-setAlignment(Qt::AlignCenter);
break;
case 2:
alignmentLineEdit-setAlignment(Qt::AlignRight);
}
4.setReadOnly()设置能否编辑
switch (index) {
case 0:
accessLineEdit-setReadOnly(false);
break;
case 1:
accessLineEdit-setReadOnly(true);
}
5.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);
}
6.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;#);
}
7.setMaxLength()设置可以输入的最多字符数
//最多只能输入9个字符
echoLineEdit-setMaxLength(9);
8.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);
如果不控制输入那么必须在输入后检查输入是否合法但控制输入后的输入肯定是合法的可以省去检查合法的繁琐步骤。只需使用正则表达式控制输入的度分秒范围然后控制输入的格式。 一些测试代码供参考——
头文件
#ifndef WINDOW_H
#define WINDOW_H
#include QWidget
QT_BEGIN_NAMESPACE
class QComboBox;
class QLineEdit;
QT_END_NAMESPACE
//! [0]
class Window : public QWidget
{
Q_OBJECT
public:
Window();
public slots:
void echoChanged(int);
void validatorChanged(int);
void alignmentChanged(int);
void inputMaskChanged(int);
void accessChanged(int);
private:
QLineEdit *echoLineEdit;
QLineEdit *validatorLineEdit;
QLineEdit *alignmentLineEdit;
QLineEdit *inputMaskLineEdit;
QLineEdit *accessLineEdit;
};
//! [0]
#endif
实现
#include QtWidgets
#include window.h
//! [0]
Window::Window()
{
QGroupBox *echoGroup new QGroupBox(tr(Echo));
QLabel *echoLabel new QLabel(tr(Mode:));
QComboBox *echoComboBox new QComboBox;
echoComboBox-addItem(tr(Normal));
echoComboBox-addItem(tr(Password));
echoComboBox-addItem(tr(PasswordEchoOnEdit));
echoComboBox-addItem(tr(No Echo));
echoLineEdit new QLineEdit;
//test
/*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);*/
//echoLineEdit-setMaxLength(9);
echoLineEdit-setPlaceholderText(电影、影人、影院、电视剧);
echoLineEdit-setFocus();
//! [0]
//! [1]
QGroupBox *validatorGroup new QGroupBox(tr(Validator));
QLabel *validatorLabel new QLabel(tr(Type:));
QComboBox *validatorComboBox new QComboBox;
validatorComboBox-addItem(tr(No validator));
validatorComboBox-addItem(tr(Integer validator));
validatorComboBox-addItem(tr(Double validator));
validatorLineEdit new QLineEdit;
validatorLineEdit-setPlaceholderText(Placeholder Text);
//! [1]
//! [2]
QGroupBox *alignmentGroup new QGroupBox(tr(Alignment));
QLabel *alignmentLabel new QLabel(tr(Type:));
QComboBox *alignmentComboBox new QComboBox;
alignmentComboBox-addItem(tr(Left));
alignmentComboBox-addItem(tr(Centered));
alignmentComboBox-addItem(tr(Right));
alignmentLineEdit new QLineEdit;
alignmentLineEdit-setPlaceholderText(Placeholder Text);
//! [2]
//! [3]
QGroupBox *inputMaskGroup new QGroupBox(tr(Input mask));
QLabel *inputMaskLabel new QLabel(tr(Type:));
QComboBox *inputMaskComboBox new QComboBox;
inputMaskComboBox-addItem(tr(No mask));
inputMaskComboBox-addItem(tr(Phone number));
inputMaskComboBox-addItem(tr(ISO date));
inputMaskComboBox-addItem(tr(License key));
inputMaskLineEdit new QLineEdit;
inputMaskLineEdit-setPlaceholderText(Placeholder Text);
//! [3]
//! [4]
QGroupBox *accessGroup new QGroupBox(tr(Access));
QLabel *accessLabel new QLabel(tr(Read-only:));
QComboBox *accessComboBox new QComboBox;
accessComboBox-addItem(tr(False));
accessComboBox-addItem(tr(True));
accessLineEdit new QLineEdit;
accessLineEdit-setPlaceholderText(Placeholder Text);
//! [4]
//! [5]
connect(echoComboBox, SIGNAL(activated(int)),
this, SLOT(echoChanged(int)));
connect(validatorComboBox, SIGNAL(activated(int)),
this, SLOT(validatorChanged(int)));
connect(alignmentComboBox, SIGNAL(activated(int)),
this, SLOT(alignmentChanged(int)));
connect(inputMaskComboBox, SIGNAL(activated(int)),
this, SLOT(inputMaskChanged(int)));
connect(accessComboBox, SIGNAL(activated(int)),
this, SLOT(accessChanged(int)));
//! [5]
//! [6]
QGridLayout *echoLayout new QGridLayout;
echoLayout-addWidget(echoLabel, 0, 0);
echoLayout-addWidget(echoComboBox, 0, 1);
echoLayout-addWidget(echoLineEdit, 1, 0, 1, 2);
echoGroup-setLayout(echoLayout);
//! [6]
//! [7]
QGridLayout *validatorLayout new QGridLayout;
validatorLayout-addWidget(validatorLabel, 0, 0);
validatorLayout-addWidget(validatorComboBox, 0, 1);
validatorLayout-addWidget(validatorLineEdit, 1, 0, 1, 2);
validatorGroup-setLayout(validatorLayout);
QGridLayout *alignmentLayout new QGridLayout;
alignmentLayout-addWidget(alignmentLabel, 0, 0);
alignmentLayout-addWidget(alignmentComboBox, 0, 1);
alignmentLayout-addWidget(alignmentLineEdit, 1, 0, 1, 2);
alignmentGroup- setLayout(alignmentLayout);
QGridLayout *inputMaskLayout new QGridLayout;
inputMaskLayout-addWidget(inputMaskLabel, 0, 0);
inputMaskLayout-addWidget(inputMaskComboBox, 0, 1);
inputMaskLayout-addWidget(inputMaskLineEdit, 1, 0, 1, 2);
inputMaskGroup-setLayout(inputMaskLayout);
QGridLayout *accessLayout new QGridLayout;
accessLayout-addWidget(accessLabel, 0, 0);
accessLayout-addWidget(accessComboBox, 0, 1);
accessLayout-addWidget(accessLineEdit, 1, 0, 1, 2);
accessGroup-setLayout(accessLayout);
//! [7]
//! [8]
QGridLayout *layout new QGridLayout;
layout-addWidget(echoGroup, 0, 0);
layout-addWidget(validatorGroup, 1, 0);
layout-addWidget(alignmentGroup, 2, 0);
layout-addWidget(inputMaskGroup, 0, 1);
layout-addWidget(accessGroup, 1, 1);
setLayout(layout);
setWindowTitle(tr(Line Edits));
}
//! [8]
//! [9]
void Window::echoChanged(int index)
{
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);
}
}
//! [9]
//! [10]
void Window::validatorChanged(int index)
{
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);
}
validatorLineEdit-clear();
}
//! [10]
//! [11]
void Window::alignmentChanged(int index)
{
switch (index) {
case 0:
alignmentLineEdit-setAlignment(Qt::AlignLeft);
break;
case 1:
alignmentLineEdit-setAlignment(Qt::AlignCenter);
break;
case 2:
alignmentLineEdit-setAlignment(Qt::AlignRight);
}
}
//! [11]
//! [12]
void Window::inputMaskChanged(int index)
{
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;#);
}
}
//! [12]
//! [13]
void Window::accessChanged(int index)
{
switch (index) {
case 0:
accessLineEdit-setReadOnly(false);
break;
case 1:
accessLineEdit-setReadOnly(true);
}
}
//! [13]