http://www.cnblogs.com/hellovenus/p/5183593.html
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
);
}
}
//! [1
|