2.4.1QT输入控件组之Line Edit
ui界面的输入控件组
- Combo Box:组合框
- Font Combo Box:字体组合框
- Line Edit:单行编辑框
- Text Edit:多行文本编辑框
- Plain Text Edit:纯文本编辑
- Spin Box:整数显示框
- Double Spin Box:浮点数显示框
- Time Edit:时间编辑
- Data Edit:日期编辑
- Data/Time Edit:日期/时间编辑器
- Dial:转盘(刻度盘)
- Horizontal Scroll Bar:横向滚动条
- Vertical Scroll Bar:垂直滚动条
- Horizontal Slider:横向滑块
- Vertical Slider:垂直滑块
- 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>
头文件。
- 正则表达式构造函数:
QRegExpValidator::QRegExpValidator(const QRegExp & rx, QObject * parent = 0)
参数解析:
QRegExp :构造正则表达式对象给定模式的字符串类
parent :父窗口指针
- 使用 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文件文章来源:https://www.toymoban.com/news/detail-595862.html
<?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登录界面,输入密码的显示模式四种种模式,输入账号时自动补全功能,以及在输入密码后可以进行数据验证功能。文章来源地址https://www.toymoban.com/news/detail-595862.html
到了这里,关于2.4.1QT输入控件组之Line Edit的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!