2.4.1 QT输入控件组:Line Edit详解

2.4.1QT输入控件组之Line Edit


文章目录

  • 2.4.1QT输入控件组之Line Edit
  • ui界面的输入控件组
  • 2.4.1lineEdit单行文本编辑器
  • 2.4.1.1常用的成员函数
  • 2.4.1.2常用的槽函数(已经实现)
  • 2.4.1.3常用信号
  • 2.4.1.4数据校验器
  • 2.4.1.5浮点数值验证器
  • 2.4.1.6正则表达式验证器
  • 2.4.1.7LineEdit自动补全功能
  • 总结

  • ui界面的输入控件组

    1. Combo Box:组合框
    2. Font Combo Box:字体组合框
    3. Line Edit:单行编辑框
    4. Text Edit:多行文本编辑框
    5. Plain Text Edit:纯文本编辑
    6. Spin Box:整数显示框
    7. Double Spin Box:浮点数显示框
    8. Time Edit:时间编辑
    9. Data Edit:日期编辑
    10. Data/Time Edit:日期/时间编辑器
    11. Dial:转盘(刻度盘)
    12. Horizontal Scroll Bar:横向滚动条
    13. Vertical Scroll Bar:垂直滚动条
    14. Horizontal Slider:横向滑块
    15. Vertical Slider:垂直滑块
    16. Key Sequence Edit:设置快捷键

    提示:以下是本篇文章正文内容,下面案例可供参考

    2.4.1lineEdit单行文本编辑器

    使用场景:用户名,密码输入框,搜索框等。

    头文件:#include<QLineEdit>

    2.4.1.1常用的成员函数

    1、文本设置函数

    QString text() const	获取文本数据
    void setText(const QString &)	设置文本数据
    

    2、文本的最大允许长度

    int maxLength() const 	获取文本最大允许的长度
    void setMaxLength(int)	设置文本最大允许的长度
    

    注意:lineEdit控件的文本长度默认是32767,超出限制就无法进行输入

    3、设置文本显示

    在输入密码时,不想让文本内容显示出来,可以设置文本显示的方式

    EchoMode echoMode() const 获取文本显示的模式
    void setEchoMode(EchoMode) 设置文本显示的模式
    

    EchoMode模式枚举类型:

    常量 数字 描述
    QLineEdit::Normal 0 默认显示模式,输入什么内容就显示什么内容。
    QLineEdit::NoEcho 1 不显示任何内容,Unix/Linux 下常用的密码显示模式。
    QLineEdit::Password 2 输入的每一个字符都用星号显示。
    QLineEdit::PasswordEchoOnEdit 3 输入一个字符时,短暂显示该字符,然后迅速将该字符显

    4、设置只读属性

    bool isReadOnly() const 获取属性 true 表示只读,false 表示可读可编辑
    void setReadOnly(bool) 设置属性 true 表示只读,false 表示可读可编辑
    

    在只读模式下,用户仍然可以将文本复制到剪贴板或拖放文本,但不能编辑它。属性默认为(false)表示可读可编辑。

    2.4.1.2常用的槽函数(已经实现)

    void setText(const QString &) 设置显示的文本,会清除之前的显示
    void clear() 清除显示内容
    void copy()const 复制 Ctrl+C,将选中的文本复制到剪贴板
    void cut() 剪切 Ctrl+X,将选中的文本复制到剪贴板并删除它
    void paste() 粘贴 Ctrl+V,在光标位置插入剪贴板的文本,删除选中的文本
    void redo() 撤销当前操作,返回到下一步操作与 undo()相反。
    void selectAll() 全选 Ctrl+A
    void undo() Ctrl+Z 撤销当前操作,返回上一步操作
    

    2.4.1.3常用信号

    右键单击LineEdit转到槽就可以看见常见的信号

    1、textChanged 信号:当文本内容发生改变时触发,通过图形界面方式和代码方式改变文本都可以触发。

    void textChanged(const QString & text)
    

    2、textEdited 信号:当文本内容发生改变时触发,只限于图形界面方式进行改变文本,代码方式改变文本不会触发。

    void textEdited(const QString & text)
    

    3、editingFinished 信号:文本编辑结束时触发。

    比如:在单行编辑控件里按了回车键或者该控件失去输入焦点(用户转到其他控件操作)。

    void editingFinished()
    

    4、cursorPositionChanged 信号:当光标发生改变时触发

    void cursorPositionChanged(int old, int new)
    

    old 表示前一次光标所在的位置,new 表示当前光标所在的位置。

    5、selectionChanged 信号:选中编辑框里的文本时触发,可以用 selectedText()函数获取选中的文本。

    void selectionChanged()
    

    6、returnPressed 信号:在文本编辑框内按下回车键时触发。

    void returnPressed()
    

    2.4.1.4数据校验器

    在用户输入文本内容时,可以用数据验证用户输入的数据是否正确。

    1、单行编辑控件自带的输入模板 inputMask:

    QString inputMask() const 获取已设置的模板,如果没有设置,返回空字符串
    void setInputMask(const QString & inputMask) 设置输入模板
    

    模板可输入的字符列表:

    字符 描述
    A 允许输入 ASCII 字母。A – Z、a – z 。占位的字符不可以省略.
    a 允许输入 ASCII 字母。A – Z、a – z 。占位的字符可以省略。
    N 允许输入 ASCII 字母数字字符。a – z、a – z 0 – 9。占位的字符不可以省略.
    n 允许输入 ASCII 字母数字字符。a – z、a – z 0 – 9。占位的字符可以省略。
    X 允许输入任何字符。 占位的字符不可以省略.
    x 允许输入任何字符。 占位的字符可以省略。
    9 允许输入 ASCII 数字。0 – 9。占位的字符不可以省略.
    0 允许输入 ASCII 数字。0 – 9。占位的字符可以省略。
    D 允许输入 ASCII 数字。1 – 9。占位的字符不可以省略.
    d 允许输入 ASCII 数字。1 – 9。占位的字符可以省略。
    # 允许输入 ASCII 数字 或 + –
    H 允许输入十六进制字符。 A-F、a-f、 0-9。占位的字符不可以省略。
    h 允许输入十六进制字符。 A-F、a-f、 0-9。占位的字符可以省略。
    B 允许输入二进制字符。0 – 1。占位的字符不可以省略
    b 允许输入二进制字符。0 – 1。占位的字符可以省略。
    > 将所有的字母转为大写字母。
    < 将所有的字母转为小写字母。
    !
    \

    2、整型数值验证器

    针对整数数值,可以用 QIntValidator 类作为验证器,使用该类需要包含头文件#include <QIntValidator>,该

    类常用构造函数:

    QIntValidator::QIntValidator(int minimum, int maximum, QObject * parent = 0)
    

    参数解析:

    Minimum :整数下限

    Maximum :整数上限

    Parent :父窗口指针

    只允许边界范围之内的数值输入。

    1)修改上下限函数:

    void QIntValidator::setRange(int bottom, int top)
    

    参数解析:

    Bottom :整数下限

    top :整数上限

    2)单行编辑输入验证器设置函数:

    void QLineEdit::setValidator(const QValidator * v)
    

    示例:

    //设置输入范围在 0-100 之间
    QIntValidator *line_Validator =new QIntValidator(0,100,this);
    ui->lineEdit_a->setValidator(line_Validator);
    

    2.4.1.5浮点数值验证器

    针对浮点数校验,由 QDoubleValidator 类实现,使用该类需要包含头文件#include<QDoubleValidator> ,该类常用的构造函数:

    QDoubleValidator::QDoubleValidator(double bottom, double top, int decimals, QObject * parent = 0)
    

    参数解析:

    Bottom :浮点数下限

    Top :浮点数上限

    Decimals :小数点后的数字位数限定(精度)

    Parent :父窗口指针

    注意:只允许边界范围之内的数值输入。

    示例:

    //浮点数限制范围 0.00 至 99.99 ,精度是 2 位
    
    QDoubleValidator *line_Validator =new QDoubleValidator(0.00,99.99,2,this);
    
    ui->lineEdit_a->setValidator(line_Validator);
    

    2.4.1.6正则表达式验证器

    正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是最为强大的数据验证和数据筛选武器。各种编程语言基本都有支持正则表达式的类库,Qt 提供 QRegExp 类支持正则表达式,正则表达式的验证器类为 QRegExpValidator。

    使用 QRegExpValidator 类需要加载#include <QRegExpValidator>头文件。

    1. 正则表达式构造函数:
    QRegExpValidator::QRegExpValidator(const QRegExp & rx, QObject * parent = 0)
    

    参数解析:

    QRegExp :构造正则表达式对象给定模式的字符串类

    parent :父窗口指针

    1. 使用 QRegExp 类需要加载#include <QRegExp>头文件,QRegExp 类常用的构造函数如下:
    QRegExp::QRegExp(const QRegExp & rx)
    QRegExp::QRegExp(const QString & pattern, Qt::CaseSensitivity cs = Qt::CaseSensitive, PatternSyntax syntax = 
    RegExp)
    

    参数解析:

    Pattern :正则表达式字符串

    Cs :决定大小是否敏感,默认是敏感

    syntax :语法格式

    枚举 enum Qt::CaseSensitivity:

    常数 数值 描述
    Qt::CaseInsensitive 0 不敏感
    Qt::CaseSensitive 1 敏感

    使用正则表达式示例:

    QRegExp rx("-?\\d{1,3}"); //只能输入 3 个数字。
    
    QValidator *validator = new QRegExpValidator(rx, this);
    
    QLineEdit *edit = new QLineEdit(this);
    
    edit->setValidator(validator);
    

    2.4.1.7LineEdit自动补全功能

    在进行文本编辑时,编辑器常用的一个功能就是自动补全,比如 Linux 系统命令行里面输入命令或文件名头几个字符,然后按 Tab 键就会实现命令或文件名的补全。单行编辑控件也有类似功能,可以通过设置QCompleter 实现。根据 QLineEdit 的输入 QComplete 可以实现自动补全的功能,根据单词列表提示完成单词输入,也可补全文件路径。

    1、QCompleter头文件

    #include <QCompleter>
    

    2、QCompleter 常用的构造函数

    QCompleter::QCompleter(QAbstractItemModel * model, QObject * parent = 0)
    QCompleter::QCompleter(const QStringList & list, QObject * parent = 0)
    

    参数解析:

    parent :父对象指针

    model :数据条目的模型

    List :字符串列表 (根据一个字符串列表来生成单词补全器)

    使用 List 字符串列表需要加载#include <QStringList>头文件,使用 List 字符串列表时常用到的排序函数:

    void QStringList::sort(Qt::CaseSensitivity cs = Qt::CaseSensitive)
    

    参数解析:

    cs 排序时大小写是否敏感,默认是敏感。一般用做字符数字字符串排序,中文字符串不需要排序。

    3、大小写区分设置函数

    Qt::CaseSensitivity caseSensitivity() const 返回设置的值
    void setCaseSensitivity(Qt::CaseSensitivity caseSensitivity) 设置是否区分大小写,默认是区分大小写
    

    Qt::CaseSensitivity 枚举类型有两个枚举常量:

    常数 数值 描述
    Qt::CaseInsensitive 0 不敏感
    Qt::CaseSensitive 1 敏感

    4、设置匹配单词显示的模式

    CompletionMode completionMode() const 获取显示的模式
    void setCompletionMode(CompletionMode mode) 设置显示的模式
    

    CompletionMode 是一个枚举类型,有三个枚举常量:

    常量 数值 描述
    QCompleter::PopupCompletion 0 正常弹出单词列表显示
    QCompleter::InlineCompletion 1 显示最接近的一个单词,不弹出候选列表
    QCompleter::UnfilteredPopupCompletion 2 列出所有可能的单词,不进行匹配筛选

    5、单行编辑器设置自动补全功能

    void QLineEdit::setCompleter(QCompleter * c)
    

    如果 c 是有效的自动补全器,c 就会设置给单行编辑器;如果 c 等于 NULL,将会取消单行编辑控件之前的自动补全器。

    示例:

    QStringList listyear;
    
    listyear<<"2012"<<"2013"<<"2014"<<"2015"; //年份列表
    
    QCompleter *year = new QCompleter(listyear);//构建自动补全器
    
    ui->lineEdit->setCompleter(year); //设置自动补全器功能
    
  • 示例:实现用户登录界面
  • 1、ui界面设置

    使用的控件:Lable标签(账号,密码),LineEdit单行编辑器(账号,密码的输入),PushButton按钮(账号密码输入后点击登录按钮)

    下图可以改进的地方是页面布局,可以采用水平布局和垂直布局

    2、效果实现

    代码如下

  • pro文件
  • QT       += core gui
    
    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
    
    CONFIG += c++11
    
    # The following define makes your compiler emit warnings if you use
    # any Qt feature that has been marked deprecated (the exact warnings
    # depend on your compiler). Please consult the documentation of the
    # deprecated API in order to know how to port your code away from it.
    DEFINES += QT_DEPRECATED_WARNINGS
    
    # You can also make your code fail to compile if it uses deprecated APIs.
    # In order to do so, uncomment the following line.
    # You can also select to disable deprecated APIs only up to a certain version of Qt.
    #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
    
    SOURCES += \
        main.cpp \
        widget.cpp
    
    HEADERS += \
        widget.h
    
    FORMS += \
        widget.ui
    
    # Default rules for deployment.
    qnx: target.path = /tmp/$${TARGET}/bin
    else: unix:!android: target.path = /opt/$${TARGET}/bin
    !isEmpty(target.path): INSTALLS += target
    
    
  • widget.h文件
  • #ifndef WIDGET_H
    #define WIDGET_H
    
    #include <QWidget>
    
    QT_BEGIN_NAMESPACE
    namespace Ui { class Widget; }
    QT_END_NAMESPACE
    
    class Widget : public QWidget
    {
        Q_OBJECT
    
    public:
        Widget(QWidget *parent = nullptr);
        ~Widget();
    
    private slots:
        void on_pushButton_clicked();
    
    private:
        Ui::Widget *ui;
    };
    #endif // WIDGET_H
    
    
  • main.cpp文件
  • #include "widget.h"
    
    #include <QApplication>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        Widget w;
        w.show();
        return a.exec();
    }
    
    
  • widget.cpp文件
  • #include "widget.h"
    #include "ui_widget.h"
    #include<QCompleter>//自动补全功能的头文件
    #include<QMessageBox>//消息对话框
    Widget::Widget(QWidget *parent)
        : QWidget(parent)
        , ui(new Ui::Widget)
    {
        ui->setupUi(this);
        //1.设置密码的显示模式---setEchoMode()函数
        //QLineEdit::Password--输入的每一个字符都用星号表示
        //QLineEdit::Normal--默认显示模式,输入什么内容就显示什么内容。
        //QLineEdit::NoEcho--不显示任何内容,Unix/Linux 下常用的密码显示模式。
        //QLineEdit::PasswordEchoOnEdit--**输入一个字符时,短暂显示该字符,然后迅速将该字符显**
        ui->lineEdit_password->setEchoMode(QLineEdit::Password);
    
        //2.构建账号补全列表
        QStringList listnumber;
        listnumber<<"12345"<<"12314"<<"24526"<<"2789665";
    
        //3.构建补全器
        QCompleter *number = new QCompleter(listnumber);
    
        //4.设置账号单行编辑器
        ui->lineEdit->setCompleter(number);
    
    }
    
    Widget::~Widget()
    {
        delete ui;
    }
    
    
    void Widget::on_pushButton_clicked()
    {
    
        //实际运用中可以通过 QCryptographicHash 类进行加密
        QString password_info;
        password_info+=tr("账号:");
        password_info+=ui->lineEdit->text();
    
        password_info+="\n";
        password_info+=("密码:");
        password_info+=ui->lineEdit_password->text();
        password_info+="\n";
        QMessageBox::information(this,tr("登录信息"),password_info,QMessageBox::Ok);
    
    
    }
    
    
  • widget.ui文件

    <?xml version="1.0" encoding="UTF-8"?>
    <ui version="4.0">
     <class>Widget</class>
     <widget class="QWidget" name="Widget">
      <property name="geometry">
       <rect>
        <x>0</x>
        <y>0</y>
        <width>800</width>
        <height>600</height>
       </rect>
      </property>
      <property name="windowTitle">
       <string>Widget</string>
      </property>
      <widget class="QWidget" name="">
       <property name="geometry">
        <rect>
         <x>70</x>
         <y>120</y>
         <width>281</width>
         <height>181</height>
        </rect>
       </property>
       <layout class="QVBoxLayout" name="verticalLayout">
        <item>
         <layout class="QHBoxLayout" name="horizontalLayout">
          <item>
           <widget class="QLabel" name="label">
            <property name="text">
             <string>账号:</string>
            </property>
           </widget>
          </item>
          <item>
           <widget class="QLineEdit" name="lineEdit"/>
          </item>
         </layout>
        </item>
        <item>
         <layout class="QHBoxLayout" name="horizontalLayout_2">
          <item>
           <widget class="QLabel" name="label_2">
            <property name="text">
             <string>密码:</string>
            </property>
           </widget>
          </item>
          <item>
           <widget class="QLineEdit" name="lineEdit_password"/>
          </item>
         </layout>
        </item>
        <item>
         <widget class="QPushButton" name="pushButton">
          <property name="text">
           <string>登录</string>
          </property>
         </widget>
        </item>
       </layout>
      </widget>
     </widget>
     <resources/>
     <connections/>
    </ui>
    
    
  • 总结

    今天学习的LineEdit单行文本编辑器,应用广泛,QQ登录界面,输入密码的显示模式四种种模式,输入账号时自动补全功能,以及在输入密码后可以进行数据验证功能。

    物联沃分享整理
    物联沃-IOTWORD物联网 » 2.4.1 QT输入控件组:Line Edit详解

    发表评论