2.4.1QT输入控件组之Line Edit

16 篇文章 2 订阅
11 篇文章 0 订阅

2.4.1QT输入控件组之Line Edit



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::Normal0默认显示模式,输入什么内容就显示什么内容。
QLineEdit::NoEcho1不显示任何内容,Unix/Linux 下常用的密码显示模式。
QLineEdit::Password2输入的每一个字符都用星号显示。
QLineEdit::PasswordEchoOnEdit3输入一个字符时,短暂显示该字符,然后迅速将该字符显

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::CaseInsensitive0不敏感
Qt::CaseSensitive1敏感

使用正则表达式示例:

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::CaseInsensitive0不敏感
Qt::CaseSensitive1敏感

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

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

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

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

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登录界面,输入密码的显示模式四种种模式,输入账号时自动补全功能,以及在输入密码后可以进行数据验证功能。

  • 10
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

最没脑子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值