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

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

posted @ 2021-01-21 13:47  手磨咖啡  阅读(1330)  评论(0)    收藏  举报