前言
QLineEdit单行文本编辑器,一般当输入控件使用,总结一下。
设置输入提示
void setPlaceholderText(const QString &);
设置最大长度
void setMaxLength(int);
setInputMask限制输入格式
限制输入格式
void setInputMask(const QString &inputMask);
例子
IP地址限定
ui->lineEdit->setInputMask(“000.000.000.000;_”);
QValidator即可以输入格式限定也可以检查输入结果是否正确
限定输入格式
QIntValidator *intVal = new QIntValidator(this);
intVal->setRange(1, 200);//这里只能限定3位数输入,即可以输入999
ui->lineEdit->setValidator(intVal);
验证是否正确
QString text = ui->lineEdit->text();
int pos = 0;
if(ui->lineEdit->validator()->validate(text,pos) == QValidator::Acceptable){
qDebug() << "yes";
}else {
qDebug() << "no";
}
利用正则表达式限定
限定ip格式
QRegExp exp("((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)");
QRegExpValidator *reg = new QRegExpValidator(exp);
ui->lineEdit->setValidator(reg);
回显模式
void setEchoMode(QLineEdit::EchoMode)
可选参数:
QLineEdit::Normal:
显示输入的字符(默认模式)
QLineEdit::NoEcho:
关闭回显,不显示任何内容(常用在输入密码时对密码长度进行保护)
QLineEdit::Password:
显示与平台相关的密码掩码字符,而不是实际输入的字符(如显示点)。
QLineEdit::PasswordEchoOnEdit
在输入时显示当前输入的字符,现在的很多密码输入框也是这种机制
设置只读
void setReadOnly(bool)
设置清除按钮
void setClearButtonEnabled(bool enable)
设置此属性后,编辑框最后面将会有一个"叉号",可以一键清除所有内容。
QLineEdit信号事件
光标移动事件
void cursorPositionChanged(int oldPos, int newPos)
按Return、Enter键或者编辑失去焦点时
void editingFinished()
自动补全
QStringList liststr;
liststr << "hello" <<"hi"<<"haha"<< "world";//忽略大小写
QCompleter *completer = new QCompleter(liststr);
completer->setCaseSensitivity(Qt::CaseInsensitive);
ui->lineEdit->setCompleter(completer);
动态添加补全内容
QStringList liststr;
liststr << "hello" <<"hi"<<"haha"<< "world";
QStringListModel* m_listModel; = new QStringListModel(liststr,this);
QCompleter* completer = new QCompleter(m_listModel);
completer->setCaseSensitivity(Qt::CaseInsensitive);
ui->lineEdit->setCompleter(completer);
connect(ui->pushButton,&QPushButton::clicked,this,[=]()mutable{
liststr.append("hhhhhhhh");
m_listModel->setStringList(liststr);
});
输入时
点击按钮后输入时
俩中实现方式其构造函数如下
QCompleter(QAbstractItemModel *model, QObject *parent = nullptr);
QCompleter(const QStringList& completions, QObject *parent = nullptr);
两者的区别,
一个是传地址,一个是传引用。
一个使用QStringList对QCompleter进行的初始化,一个是用QStringListModel*进行的初始化。
如果想动态改变补全列表的内容,只能用传地址的方式进行初始化。
而QStringListModel正是继承QAbstractItemModel 。