转载自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学习相关推荐

  1. qlineedit文本改变时_PyQt5 QLineEdit(单行编辑器) 学习

    QLineEdit is a widget that allows to enter and edit a single line of plain text. There are undo and ...

  2. pyQt5 学习笔记(18)QLineEdit 单行文本输入

    文章目录 一.QLineEdit 简介 二.QLineEdit 的创建 三.功能(API) 1. 文本的设置与获取 2. 显示模式 3. 占位提示文本框 4. 清空按钮显示 5. 添加操作行为 1. ...

  3. Qt学习总结之Qlineedit

    一.描述 QLineEdit是一个单行文本编辑器,允许用户输入和编辑单行纯文本.自带一些编辑例如撤销.重做.剪切.粘贴等功能. QLineEdit继承自QWidget类,具备父类各种API. 下表列出 ...

  4. QT学习第8课:QT计算器界面实现

    声明:此文章仅是个人在学习狄泰QT课程所做的笔记,文章中包含狄泰资料的,一切版权归狄泰软件所有! 第8课是来做一个计算器界面,只是一个界面显示.不过也是挺兴奋的,以前一直对着黑框框,现在终于到界面了. ...

  5. python英语字典程序-Pyqt5实现英文学习词典

    运用Python语言编写程序制作英文学习词典,词典有4个基本功能:添加.查询.删除和退出.程序读取源文件路径下的txt格式词典文件,若没有就创建一个.词典文件存储方式为"英文单词 中文单词& ...

  6. pyqt5讲解1:窗口,QLabel,QLineEdit,QTextEdit

    过年的时候学习啦pyqt,不怎么用,都快忘记知识点啦. 开始写下吧,好记性不如烂笔头. 窗口类控件 QMainWindow 详细描述 QMainWindow类提供一个有菜单条.锚接窗口(例如工具条)和 ...

  7. QLineEdit限制数据类型——只能输入浮点型数

    前言 最近做了一个小的上位机,要通过串口来下发几个时间参数,为了防止误输入,产生不必要的麻烦,我把输入范围限制在0-680的浮点型数据,支持小数点后2位.学习了一下QLineEdit类是如何限制输入类 ...

  8. QT学习笔记(十四):QLayout的属性介绍

    QT学习笔记(十四):QLayout的属性介绍 主要包括QBoxLayout.和QGridLayout以及QFormLayout等的参数类似. 我主要说明一下QGridLayout在QtDesigne ...

  9. QT学习笔记(五):Qt5的8种标准对话框示例

    QT学习笔记(五):Qt5的8种标准对话框示例 前言 实例展示 1.颜色对话框 2.文件对话框 3.字体对话框 4.输入对话框 5.消息对框 6.进度对话框 7.错误信息对话框 8.向导对话框. 前言 ...

最新文章

  1. 蓝图Blueprint
  2. Java继承Thread类创建多线程
  3. matlab图像处理函数
  4. java emoji编码转换_java转换emoji表情
  5. django中的urlpatterns的正则语法
  6. 3.3 tensorflow2实现Mann - Whitney U统计量检验法 ——python实战
  7. android arcgis 添加地图,ArcGis for Android在地图上添加自定义图标
  8. php 伪静态 获取当前页面路径_php url伪静态过程详解
  9. 天勤数据结构——绪论
  10. WPF实现截图功能——WPF制作文字OCR软件(三)
  11. pr同时对多个视频进行缩放
  12. python求三个整数最大值_Python 输入三个整数,输出最大值
  13. (20201209已解决)从window访问wsl地址
  14. Android jenkins 自动化打包
  15. linux服务器数据同步,Linux服务器数据定期同步和备份方式
  16. Win7中双击bat文件变成打开文本编辑器后如何恢复
  17. WORD页码相同问题
  18. App Inventor 四字节转单精度浮点数
  19. 把大象装冰箱,需要分几步?- - -迅雷产品经理笔试、面试回顾
  20. 全球十大正规黄金期货交易APP平台排名(2023版榜单)

热门文章

  1. flex 鼠标放在组件上变手型
  2. 平衡二叉树所涉及的一些算法
  3. [论文阅读] (06) 万字详解什么是生成对抗网络GAN?经典论文及案例普及
  4. 2020年第十一届蓝桥杯 - 国赛 - Python大学组 - H.答疑
  5. 144. Binary Tree Preorder Traversal 二叉树的前序遍历
  6. 剑指 Offer 11. 旋转数组的最小数字 LCOF
  7. BEGIN-4 Fibonacci数列
  8. 机器学习——01、机器学习的数学基础1 - 数学分析
  9. Ubuntu中运行pip时报错
  10. 【Qt】Qt程序发布