日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

QLineEdit学习

發布時間:2024/4/18 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 QLineEdit学习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載自https://www.cnblogs.com/wangjian8888/p/7678270.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);

????}

}

總結

以上是生活随笔為你收集整理的QLineEdit学习的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。