Qt之输入控件(QLineEdit)

简述

QLineEdit是一个单行文本输入框,带有撤销、剪切、粘贴以及拖拽等功能。

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

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

用法

下面用一个小例子来展示一个QLineEdit的基础效果

效果

源码

    QLineEdit *lineEdit1 = new QLineEdit;
    lineEdit1->setEchoMode(QLineEdit::Normal);
    lineEdit1->setPlaceholderText("Normal");
    QLineEdit *lineEdit2 = new QLineEdit;
    lineEdit2->setEchoMode(QLineEdit::Password);
    lineEdit2->setPlaceholderText("Password");
    QLineEdit *lineEdit3 = new QLineEdit;
    lineEdit3->setEchoMode(QLineEdit::NoEcho);
    lineEdit3->setPlaceholderText("NoEcho");

    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(lineEdit1);
    layout->addWidget(lineEdit2);
    layout->addWidget(lineEdit3);

    this->setLayout(layout);

常用接口

常用属性

  • 设置输入掩码
    • inputMask
字符 ASCII字母字符是必须的,A-Z、a-z。
A ASCII字母字符是允许的,但不是必须的。
a ASCII字母字符是允许的,但不是必须的。
N ASCII字母字符是必须的,A-Z、a-z、0-9。
n ASCII字母字符是允许的,但不是必须的。
X 任何字符都是必须要的。
x 任何字符都是允许的,但不是必须要的。
9 ASCII数字是必须要的,0-9。
0 ASCII数字是允许的,但不是必须要的。
D ASCII数字是必须要的,1-9。
d ASCII数字是允许的,但不是必须要的 (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-00 ISO日期,空白是空格。
>AAAAA-AAAAA-AAAAA-AAAAA-AAAAA;# License号,空白是-,并且所有(字母)字符转换为大写。
  • 文本清除按钮
    • 一个用来清除输入框中文本的按钮
  • 占位符文本
    • placeHolderText
  • 拖拽文本
    • dragEnabled
  • 选中的文本
    • selectedText
  • 输出模式
    • echoMode
常量 描述
QLineEdit::Normal 0 正常显示输入的字符,默认选项
QLineEdit::NoEcho 1 不显示任何输入,常用于密码类型,其密码长度都需要保密的时候
QLineEdit::Password 2 显示平台相关的密码掩码字符,而不是实际的字符输入
QLineEdit::PasswordEchoOnEdit 3 在编辑的时候显示字符,负责显示密码类型

公有函数

  • 添加动作
    • addAction

效果

源码

    QLineEdit *lineEdit1 = new QLineEdit;
    lineEdit1->setEchoMode(QLineEdit::Normal);
    lineEdit1->addAction(QIcon(":/picture/google.png"), QLineEdit::LeadingPosition);
    lineEdit1->addAction(QIcon(":/picture/search.png"), QLineEdit::TrailingPosition);
    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(lineEdit1);
    this->setLayout(layout);

注:lineEdit1->addAction会返回一个QAction指针,我们可以利用这个指针获得QAction的信号并与相应槽函数绑定。

  • 设置输入文本对齐方式
    • setAlignment
  • 设置清除按钮
    • setClearButtonEnabled

效果

源码

    QLineEdit *lineEdit1 = new QLineEdit;
    lineEdit1->setClearButtonEnabled(true);
    lineEdit1->setCursorMoveStyle(Qt::VisualMoveStyle);

    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(lineEdit1);

    this->setLayout(layout);
  • 拖拽文本
    • setDragEnabled

效果

源码

lineEdit1->setDragEnabled(true);
  • 设置输出模式
    • setEchoMode

效果

源码

    QLineEdit *lineEdit1 = new QLineEdit;
    lineEdit1->setEchoMode(QLineEdit::Normal);
    QLineEdit *lineEdit2 = new QLineEdit;
    lineEdit2->setEchoMode(QLineEdit::NoEcho);
    QLineEdit *lineEdit3 = new QLineEdit;
    lineEdit3->setEchoMode(QLineEdit::Password);
    QLineEdit *lineEdit4 = new QLineEdit;
    lineEdit4->setEchoMode(QLineEdit::PasswordEchoOnEdit);


    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(lineEdit1);
    layout->addWidget(lineEdit2);
    layout->addWidget(lineEdit3);
    layout->addWidget(lineEdit4);

    this->setLayout(layout);
  • 设置输入掩码
    • setInputMask

效果

源码

    QLineEdit *lineEdit1 = new QLineEdit;
    lineEdit1->setInputMask("000.000.000.000;_");
    QLineEdit *lineEdit2 = new QLineEdit;
    lineEdit2->setInputMask("HH:HH:HH:HH:HH:HH;_");
    QLineEdit *lineEdit3 = new QLineEdit;
    lineEdit3->setInputMask("0000-00-00");
    QLineEdit *lineEdit4 = new QLineEdit;
    lineEdit4->setInputMask(">AAAAA-AAAAA-AAAAA-AAAAA-AAAAA;#");

    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(lineEdit1);
    layout->addWidget(lineEdit2);
    layout->addWidget(lineEdit3);
    layout->addWidget(lineEdit4);

    this->setLayout(layout);
  • 设置占位符
    • setPlaceHolderText

效果

源码

    QLineEdit *lineEdit1 = new QLineEdit;
    lineEdit1->setEchoMode(QLineEdit::Normal);
    lineEdit1->setPlaceholderText("Normal");
    QLineEdit *lineEdit2 = new QLineEdit;
    lineEdit2->setEchoMode(QLineEdit::NoEcho);
    lineEdit2->setPlaceholderText("NoEcho");
    QLineEdit *lineEdit3 = new QLineEdit;
    lineEdit3->setEchoMode(QLineEdit::Password);
    lineEdit3->setPlaceholderText("PassWard");
    QLineEdit *lineEdit4 = new QLineEdit;
    lineEdit4->setEchoMode(QLineEdit::PasswordEchoOnEdit);
    lineEdit4->setPlaceholderText("PasswordEchoOnEdit");


    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(lineEdit1);
    layout->addWidget(lineEdit2);
    layout->addWidget(lineEdit3);
    layout->addWidget(lineEdit4);

    this->setLayout(layout);

槽函数

意义
clear 清除输入框中文本
copy 复制选中的文本
cut 剪切选中的文本
paste 将粘贴板中的文本粘贴到输入框
redo 重复做
selectAll 选中所有文本
setText 为输入框设置文本
undo 撤销

信号

信号 意义
cursorPositionChanged 鼠标位置变化
editingFinished 编辑结束
inputRejected 拒绝输入
returnPressed 回车键按下
selectionChanged 文本选择变化
textChanged 输入框中文本变化(编程和用户输入)
texEdited 输入框中文本变化(仅限于用户输入)

引用

[1] Qt助手

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章