Qt之QLineEdit详解(附源码)

原博客地址:http://blog.csdn.net/liang19890820/article/details/52044639,感谢原作者总结和分享。

简述

QLineEdit是一个单行文本输入框。

QLineEdit允许用户输入和编辑单行纯文本,提供了很多有用的编辑功能,包括:撤消和重做、剪切和粘贴、以及拖放(见setDragEnabled())。

通过改变输入框的echoMode(),同时也可以设置为一个“只写”字段,用于输入密码等。

文本的长度可以被限制为maxLength(),可以使用一个validator()或inputMask()来任意限制文本。当在同一个输入框中切换验证器和输入掩码的时候,最好是清除验证器或输入掩码,防止不确定的行为。

  • 简述
  • 内容
    • 详细介绍
    • 共有类型
    • 常用接口
    • 信号
    • 共有槽
  • 示例
    • QLineEditEchoMode效果
      • 效果
      • 源码
    • 自定义搜索框
      • 效果
      • 源码
    • 验证器
      • 效果
      • 源码
    • 输入掩码
      • 效果
      • 源码
  • 更多参考

内容

详细介绍

与其相关的一个类是QTextEdit - 允许多行、富文本编辑。

可以使用setText()或insert()来改变文本,通过text()来获取文本;显示的文本(可能不同,详见:EchoMode)通过displayText()来获取。文本可以使用setSelection()或selectAll()来选中,选中的文本可以被cut()、copy()和paste(),使用setAlignment()来设置文本的对齐方式。

当文本改变时,会发射textChanged()信号。当使用setText()改变文本时,textEdited()信号也会发射。光标位置发生变化时,会发射cursorPositionChanged()信号,当Return或Enter键被按下时,发射returnPressed()信号。

当编辑完成,或者是因为输入框失去焦点,或Return/Enter键被按下时,发出的editingFinished()信号。

注意:如果输入框有一个验证器,returnPressed()/editingFinished()信号只有在验证期返回QValidator::Acceptable的时候才会被发射。

默认情况下,QLineEdit具有由平台风格指南规定的边框,可以通过setFrame(false)将其关闭。

默认键被绑定描述如下。输入框还提供了一些编辑选项的上下文菜单(通常通过单击鼠标右键调用)。

按键动作
Left Arrow光标左移一个字符
Shift+Left Arrow光标左移并选择一个字符
Right Arrow光标右移一个字符
Shift+Right Arrow光标右移并选择一个字符
Home将光标移动到行的开头
End将光标移动到行的末尾
Backspace删除光标左侧字符
Ctrl+Backspace删除光标左侧的单词
Delete删除光标右侧字符
Ctrl+Delete删除光标右侧的单词
Ctrl+A全选
Ctrl+C复制选中的文本复制到剪贴板
Ctrl+Insert复制选中的文本复制到剪贴板
Ctrl+K删除此处至末尾所有内容
Ctrl+V粘贴剪贴板的文本到输入框中
Shift+Insert粘贴剪贴板的文本到输入框中
Ctrl+X剪切选中的文本到剪贴板
Shift+Delete剪切选中的文本到剪贴板
Ctrl+Z撤销上一次操作
Ctrl+Y重做上一次操作

共有类型

  • 枚举:QLineEdit::ActionPosition

    描述如何显示加入到输入框中的action部件。

常量描述
QLineEdit::LeadingPosition0当使用布局方向Qt::LeftToRight时,部件显示在文本左侧;使用Qt::RightToLeft时,则显示在右侧。
QLineEdit::TrailingPosition1当使用布局方向Qt::LeftToRight时,部件显示在文本右侧;使用Qt::RightToLeft时,则显示在左侧。


  • 枚举:QLineEdit::EchoMode

    描述输入框如何显示其内容。

常量描述
QLineEdit::Normal0正常显示输入的字符,默认选项。
QLineEdit::NoEcho1不显示任何输入,常用于密码类型,其密码长度都需要保密的时候。
QLineEdit::Password2显示平台相关的密码掩码字符,而不是实际的字符输入。
QLineEdit::PasswordEchoOnEdit3在编辑的时候显示字符,负责显示密码类型。

常用接口

这里列举了一些常用接口,但并非全部的,要获得更多信息请参考助手。

  • QString text() const 
    返回输入框的当前文本。

  • void addAction(QAction * action, ActionPosition position)

  • QAction * addAction(const QIcon & icon, ActionPosition position) 
    添加action至指定位置。

  • Qt::Alignment alignment() const

  • void setAlignment(Qt::Alignment flag)

    alignment : Qt::Alignment 
    属性保存了输入框的对齐方式(水平和垂直方向)。Qt::AlignJustify映射到Qt::AlignLeft。 
    默认情况下,该属性包含Qt::AlignLeft和Qt::AlignVCenter。

  • QCompleter* completer() const

  • void setCompleter(QCompleter * c) 
    QCompleter后面详细讲解。

  • void deselect() 
    取消选中任何已选中的文本。

  • QString displayText() const 
    返回显示的文本。默认值为一个空字符串。 
    如果echoMode是Normal,和text()返回的一样;如果EchoMode是Password或PasswordEchoOnEdit,会返回平台相关的密码掩码字符,长度为text().length(),例如:"******";如果EchoMode是NoEcho,返回一个空字符串""

  • QString selectedText() const 
    返回选中的的文本。如果没有选中,返回一个空字符串。默认为一个空字符串。

  • int cursorPosition() const

  • void setCursorPosition(int)

    cursorPosition : int 
    属性包含输入框当前光标的位置。设置光标位置时,会导致应有的重绘。默认情况下,属性值为0。

  • EchoMode echoMode() const

  • void setEchoMode(EchoMode)

    echoMode : EchoMode 
    属性保存了输入框的显示模式。显示模式决定了输入框对用户的文本显示。默认值为Normal 
    最常用的设置是Normal,用户输入文本被逐字显示;还包含其它模糊输入,例如:NoEcho、Password和PasswordEchoOnEdit。 
    部件的显示、复制或拖动文本的行为受此设置的影响。

  • int maxLength() const

  • void setMaxLength(int)

    maxLength : int 
    此属性包含文本的最大允许长度。如果文本太长,将从限制的位置截断。默认值为32767。 
    如果发生截断任何选中的文本将取消选中,光标位置设置为0,并且显示字符串的第一部分。 
    如果输入框有一个输入掩码,那么,掩码定义字符串的最大长度。

  • QString placeholderText() const

  • void setPlaceholderText(const QString &)

    placeholderText : QString 
    当输入框为空时,输入框显示一个灰色的占位符文本。默认值为一个空字符串。 
    通常,一个空的输入框显示占位符文本,即使它有焦点。然而,如果内容水平居中,当输入框有焦点时,占位符文本不显示在光标下。

  • bool isReadOnly() const

  • void setReadOnly(bool)

    readOnly : bool 
    此属性保存输入框是否为只读。 
    在只读模式下,用户仍然可以将文本复制到剪贴板,或拖放文本(如果echoMode()是Normal),但不能编辑它。 
    只读模式下,QLineEdit也不显示光标。

  • void setSelection(int start, int length) 
    从位置start选择文本为length个字符,允许负长度。

  • void setValidator(const QValidator * v) 
    设置输入框的验证器,将限制任意可能输入的文本。如果v == 0,将会清除当前的输入验证器 
    如果v = = 0,setValidator()删除当前的输入验证器。初始设置是没有输入验证器(即:接受任何输入到maxLength())。

  • const QValidator * validator() const 
    返回一个当前输入的验证器指针,如果没有设置验证器,返回0。

  • QString inputMask() const

  • void setInputMask(const QString & inputMask)

    inputMask : QString 
    此属性保存验证器的输入掩码。如果没设置研发,inputMask() 或返回一个空字符串。传递一个空字符串可以取消验码并返回一个正常QLineEdit。

下表列出了可在一个输入掩码中使用的字符。空格字符,是一个空白的缺省字符,当一个字符是允许的,但不是必须的请胯下。

字符含义
AASCII字母字符是必须的,A-Z、a-z。
aASCII字母字符是允许的,但不是必须的。
NASCII字母字符是必须的,A-Z、a-z、0-9。
nASCII字母字符是允许的,但不是必须的。
X任何字符都是必须要的。
x任何字符都是允许的,但不是必须要的。
9ASCII数字是必须要的,0-9。
0ASCII数字是允许的,但不是必须要的。
DASCII数字是必须要的,1-9。
dASCII数字是允许的,但不是必须要的 (1-9)。
#ASCII数字或加/减符号是允许的,但不是必须要的。
H十六进制数据字符是必须要的,A-F、a-f、0-9。
h十六进制数据字符是允许的,但不是必须要的。
B二进制数据字符是必须要的,0-1。
b二进制数据字符是允许的,但不是必须要的。
>所有的字符字母都大写
<所有的字符字母都小写
!关闭大小写转换
\使用 \ 去转义上述列出的字符。


掩码由掩码字符和分隔符字符串组成,后面可以跟一个分号和用于空白的字符,空白字符在编辑后总是从文本中删除。

示例:

掩码注意事项
000.000.000.000;_IP地址,空白是_。
HH:HH:HH:HH:HH:HH;_MAC地址。
0000-00-00ISO日期,空白是空格。
>AAAAA-AAAAA-AAAAA-AAAAA-AAAAA;#License号,空白是-和所有(字母)字符转换为大写。

信号

  • void selectionChanged() 
    只要选择改变这个信号就会被发射。

  • void cursorPositionChanged(int old, int new) 
    只要光标移动,这个信号就会发射。前面的位置old,新的位置是new。

  • void editingFinished()

  • void returnPressed()
  • void textChanged(const QString & text)
  • void textEdited(const QString & text) 
    参考:“详细描述”

共有槽

  • void clear() 
    清除输入框内容

  • void copy() const 
    如果echoMode()是Normal,将选中的文本复制到剪贴板。

  • void cut() 
    如果echoMode()是Normal,将所选文本复制到剪贴板并删除它。 
    如果当前的验证不允许删除选定的文本,cut()将复制而不删除。

  • void paste() 
    如果输入框不是只读的,插入剪贴板中的文本到光标所在位置,删除任何选定的文本。 
    如果最终的结果不被当前的验证器接受,将没有任何反应。

  • void redo() 
    重做上次操作,如果redo可用(isRedoAvailable() )。

  • void selectAll() 
    选中所有文本(即:高亮),并将光标移动到末尾。当一个默认值被插入时,这非常有用,因为如果用户在点击部件之前就输入,选中的文本将被删除。

  • void setText(const QString &) 
    设置输入框显示的文本。

  • void undo() 
    撤消上次操作,如果撤消可用( isUndoAvailable())。取消任何当前的选中,并更新选中到当前光标位置。

示例

QLineEdit::EchoMode效果

首先,来演示QLineEdit::EchoMode的效果。

效果


源码

[cpp] view plaincopy
  1. <strong>    QLineEdit *pNormalLineEdit = new QLineEdit(this);  
  2.     QLineEdit *pNoEchoLineEdit = new QLineEdit(this);  
  3.     QLineEdit *pPasswordLineEdit = new QLineEdit(this);  
  4.     QLineEdit *pPasswordEchoOnEditLineEdit = new QLineEdit(this);  
  5.   
  6.     pNormalLineEdit->setPlaceholderText("Normal");  
  7.     pNoEchoLineEdit->setPlaceholderText("NoEcho");  
  8.     pPasswordLineEdit->setPlaceholderText("Password");  
  9.     pPasswordEchoOnEditLineEdit->setPlaceholderText("PasswordEchoOnEditLineEdit");  
  10.   
  11.     // 设置显示效果  
  12.     pNormalLineEdit->setEchoMode(QLineEdit::Normal);  
  13.     pNoEchoLineEdit->setEchoMode(QLineEdit::NoEcho);  
  14.     pPasswordLineEdit->setEchoMode(QLineEdit::Password);  
  15.     pPasswordEchoOnEditLineEdit->setEchoMode(QLineEdit::PasswordEchoOnEdit);  
  16.   
  17.     QVBoxLayout *gLayout = new QVBoxLayout(this);  
  18.     gLayout->addWidget(pNormalLineEdit,0,0);  
  19.     gLayout->addWidget(pNoEchoLineEdit,1,0);  
  20.     gLayout->addWidget(pPasswordLineEdit,2,0);  
  21.     gLayout->addWidget(pPasswordEchoOnEditLineEdit,3,0);  
  22.   
  23.     this->setLayout(gLayout);</strong>  

自定义搜索框

关于搜索框,我们经常接触。例如:浏览器搜索、Windows资源管理器搜索等。

效果


源码

通过QLineEdit的addAction()函数来加入action,这里我们使用了重载函数。

[cpp] view plaincopy
  1. m_pLineEdit = new QLineEdit(this);  
  2. m_pLabel = new QLabel(this);  
  3.   
  4. m_pLineEdit->setPlaceholderText(QString::fromLocal8Bit("请输入搜索内容"));  
  5. m_pLabel->setText(QString::fromLocal8Bit("输入内容为:"));  
  6.   
  7. QAction *pLeadingAction = new QAction(this);  
  8. pLeadingAction->setIcon(QIcon("D:/qt/LineEdit/2.png"));  
  9. m_pLineEdit->addAction(pLeadingAction, QLineEdit::LeadingPosition);  
  10.   
  11. QAction *pTrailingAction = new QAction(this);  
  12. pTrailingAction->setIcon(QIcon("D:/qt/LineEdit/1.ico"));  
  13. m_pLineEdit->addAction(pTrailingAction, QLineEdit::TrailingPosition);  
  14.   
  15. // 连接信号和槽  
  16. connect(pTrailingAction, SIGNAL(triggered(bool)), this, SLOT(onSearch(bool)));  


槽函数,用于获取输入框中的内容,然后处理。

[cpp] view plaincopy
  1. void Widget::onSearch(bool checked)  
  2. {  
  3.     QString strText = m_pLineEdit->text();  
  4.     m_pLabel->setText(QString::fromLocal8Bit("输入内容为:%1").arg(strText));  
  5. }  

验证器

通常情况下,我们会对用户的输入做一些限制,可以通过验证起来设置,常见的有:整形、浮点型及其它自定义验证器。

效果


源码

[cpp] view plaincopy
  1. QLineEdit *pIntLineEdit = new QLineEdit(this);  
  2. QLineEdit *pDoubleLineEdit = new QLineEdit(this);  
  3. QLineEdit *pValidatorLineEdit = new QLineEdit(this);  
  4.   
  5. pIntLineEdit->setPlaceholderText(QString::fromLocal8Bit("整形"));  
  6. pDoubleLineEdit->setPlaceholderText(QString::fromLocal8Bit("浮点型"));  
  7. pValidatorLineEdit->setPlaceholderText(QString::fromLocal8Bit("字母和数字"));  
  8.   
  9. // 整形 范围:[1, 99]  
  10. QIntValidator *pIntValidator = new QIntValidator(this);  
  11. pIntValidator->setRange(1, 99);  
  12.   
  13. // 浮点型 范围:[-360, 360] 精度:小数点后2位  
  14. QDoubleValidator *pDoubleValidator = new QDoubleValidator(this);  
  15. pDoubleValidator->setRange(-360, 360);  
  16. pDoubleValidator->setNotation(QDoubleValidator::StandardNotation);  
  17. pDoubleValidator->setDecimals(2);  
  18.   
  19. // 字符和数字  
  20. QRegExp reg("[a-zA-Z0-9]+$");  
  21. QRegExpValidator *pValidator = new QRegExpValidator(this);  
  22. pValidator->setRegExp(reg);  
  23.   
  24. pIntLineEdit->setValidator(pIntValidator);  
  25. pDoubleLineEdit->setValidator(pDoubleValidator);  
  26. pValidatorLineEdit->setValidator(pValidator);  


输入掩码

要限制用户输入,除了验证器,还可以使用输入掩码,常见的有IP、MAC地址、日期、License号等。

效果


源码

[cpp] view plaincopy
  1. QLineEdit *pIPLineEdit = new QLineEdit(this);  
  2. QLineEdit *pMACLineEdit = new QLineEdit(this);  
  3. QLineEdit *pDateLineEdit = new QLineEdit(this);  
  4. QLineEdit *pLicenseLineEdit = new QLineEdit(this);  
  5.   
  6. pIPLineEdit->setInputMask("000.000.000.000;_");  
  7. pMACLineEdit->setInputMask("HH:HH:HH:HH:HH:HH;_");  
  8. pDateLineEdit->setInputMask("0000-00-00");  
  9. pLicenseLineEdit->setInputMask(">AAAAA-AAAAA-AAAAA-AAAAA-AAAAA;#");  

源码下载地址:http://download.csdn.net/detail/rl529014/9596939

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/458294.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#json数据的序列化和反序列化(将数据转换为对象或对象集合)

引用 System.Runtime.Serialization.Json 转载于:https://www.cnblogs.com/a849788087/p/5645828.html

位图(bmp)文件格式分析

from&#xff1a;https://blog.csdn.net/qingchuwudi/article/details/25785307 位图(bmp)文件格式分析 作者&#xff1a;深蓝&#xff08;由博主分享&#xff09; 一、什么是位图 计算机能以位图和矢量图格式显示图像。 1、位图(Bitmap)&#xff1a; 图像又称点阵图或光…

java 基本功 —— 内存相关

2019独角兽企业重金招聘Python工程师标准>>> 首先我们来说说内存&#xff0c;因为从内存的角度来出发来分析一些变量&#xff0c;引用或者对象的生命周期会更好理解一些。 java是一门编程语言&#xff0c;他跟C有什么不同呢&#xff1f;本质上&#xff0c;他们都是一…

DOM事件处理有三个阶段

DOM事件处理有三个阶段&#xff1a; 捕捉阶段&#xff08;capture phase&#xff09;&#xff1a;从最上层元素&#xff0c;直到最下层&#xff08;你点击的那个target&#xff09;元素。路过的所有节点都可以捕捉到该事件。命中阶段&#xff08;target phase&#xff09;&…

客户端程序自动更新(升级)的方式

from&#xff1a;https://blog.csdn.net/woaitingting1985/article/details/72954652一、C/S自动更新原理C/S程序自动升级是一个很重要的功能&#xff0c;原理其实很简单&#xff0c;一般包含两个程序一个是主程序&#xff0c;也就是除了升级功能以外的程序&#xff0c;另一个就…

怎么用源程序把ChemDraw结构复制到Word文档

在学习化学过程中&#xff0c;不可避免的会接触到各种化学结构。这个时候就需要通过绘制化学结构来进行这方面的学习和传播。ChemDraw Professional 15就可以辅助完成这方面的工作。很多的用户朋友会通过选中后复制粘贴可以将ChemDraw结构复制到Word文档中&#xff0c;但这只是…

QT串口编程的相关类(QSerialPortInfo)

QT Serial Port相关的类只有两个QSerialPortInfo(#include<QSerialPortInfo>) 和QserialPort(#include<QSerialPort>) 先来介绍QSerialPortInfo 1&#xff1a;QSerialPortInfo(#include<QSerialPortInfo>) 该类是一个串口的辅助类类&#xff0c;提供主要是提…

用jquery写一个属于自己的音乐播放器

看到一个用css3实现的CD的动画&#xff0c;演示在这儿http://codepen.io/_kieran/pen/QNRmep 突然那我就想说给自己做一个音乐播放器吧&#xff0c;说做就做。演示在https://echolsx.github.io/music/ Github传送门&#xff1a;https://github.com/EchoLsx/music 主要代码&…

MySQL 性能监控 4 大指标

【编者按】本文作者为 John Matson&#xff0c;主要介绍 mysql 性能监控应该关注的 4 大指标。 文章系国内 ITOM 管理平台 OneAPM 编译呈现。 MySQL 是什么&#xff1f; MySQL 是现而今最流行的开源关系型数据库服务器。由 Oracle 所有&#xff0c;MySQL 提供了可以免费下载的社…

【深度相机系列四】深度相机原理揭秘--结构光(iPhone X 齐刘海原理)

from&#xff1a;https://blog.csdn.net/electech6/article/details/78707839导读 结构光法&#xff1a;为解决双目匹配问题而生 深度图效果&#xff1a;结构光vs.双目 投射图案的编码方式直接编码时分复用编码空分复用编码 Kinect1原理 iPhone X原深感相机是缩小版的更强大的K…

Android倒计时工具类

为什么80%的码农都做不了架构师&#xff1f;>>> 原文地址:http://my.oschina.net/reone/blog/710003 多谢touch_ping 的回应. 原来api有这个类 android.os.CountDownTimer , 具体实现很下面的差不多. import android.content.Context; import android.os.Handler…

深度相机原理揭秘--双目立体视觉

欢迎关注计算机视觉life&#xff01;导读 为什么非得用双目相机才能得到深度&#xff1f; 双目立体视觉深度相机的工作流程 双目立体视觉深度相机详细工作原理理想双目相机成像模型极线约束图像矫正技术基于滑动窗口的图像匹配基于能量优化的图像匹配 双目立体视觉深度相机的优…

微信扫码支付模式一和模式二的区别

http://www.baidu.com/link?urlAj_xhOM5Q6rpZXkTMBPq4o0UbCO4eLq0esX8B3K2v06bkRS8F8lC4k06rv-3uZARLLTEKJHMhwzI_cdcJiHfqK&wd&eqid904bc71f000181740000000356d7d9bf https://www.zhihu.com/question/35818812/answer/66086727 知乎页面访问存在502 Bad Gateway问题…

双目视觉几何框架详解(玉米专栏8篇汇总)

一、图像坐标&#xff1a;我想和世界坐标谈谈(A) 玉米竭力用轻松具体的描述来讲述双目三维重建中的一些数学问题。希望这样的方式让大家以一个轻松的心态阅读玉米的《计算机视觉学习笔记》双目视觉数学架构系列博客。这个系列博客旨在捋顺一下已标定的双目视觉中的数学主线。数…

(原)Ubuntu14中安装GraphicsMagick

转载请注明出处&#xff1a; http://www.cnblogs.com/darkknightzh/p/5661439.html 参考网址&#xff1a; http://comments.gmane.org/gmane.comp.video.graphicsmagick.core/514 http://www.graphicsmagick.org/INSTALL-unix.html https://github.com/clementfarabet/graphics…

世界坐标系和相机坐标系,图像坐标系的关系

from&#xff1a;https://blog.csdn.net/waeceo/article/details/50580607一、四个坐标系简介和转换相机模型为以后一切标定算法的关键&#xff0c;只有这边有相当透彻的理解&#xff0c;对以后的标定算法才能有更好的理解。本人研究了好长时间&#xff0c;几乎每天都重复看几遍…

PythonOCC 3D图形库学习—创建立方体模型

Open CASCADE&#xff08;简称OCC&#xff09;平台是是一个开源的C类库&#xff0c;OCC主要用于开发二维和三维几何建模应用程序&#xff0c;包括通用的或专业的计算机辅助设计CAD系统、制造或分析领域的应用程序、仿真应用程序或图形演示工具。 PythonOCC是对Open CASCADE的封…

Struts2、SpringMVC、Servlet(Jsp)性能对比 测试 。 Servlet的性能应该是最好的,可以做为参考基准,其它测试都要向它看齐,参照...

2019独角兽企业重金招聘Python工程师标准>>> Struts2、SpringMVC、Servlet(Jsp)性能对比 测试 。 Servlet的性能应该是最好的&#xff0c;可以做为参考基准&#xff0c;其它测试都要向它看齐&#xff0c;参照它。 做为一个程序员&#xff0c;对于各个框架的性能要有…

基于图像分割的立体匹配方法

1.绪论 立体匹配是三维重建系统的关键步骤&#xff0c;并且作为一种非接触测量方法在工业以及科研领域具有重要的应用价值。为了完成匹配工作以及获取场景的稠密视差图&#xff0c;可以通过构建能量函数对应立体匹配的约束条件。复杂能量函数的全局最优解通常是NP难问题。相对于…

深度相机(二)--结构光深度测距

原文&#xff1a; http://blog.sina.com.cn/s/blog_80ce3a550100wg5j.html http://blog.csdn.net/u013360881/article/details/51395427 网上资源&#xff1a;http://eia.udg.es/~qsalvi/recerca.html 结构光编码&#xff1a; 在3D 的深度获取上&#xff0c;最为常见的方法是类…