Qt -- QLineEdit使用总结
以上是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()对输入进行限制
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
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]
https://blog.csdn.net/lmhuanying1012/article/details/79798465