【Qt】输入类控件QLineEdit

news2024/11/29 4:53:09

目录

 输入类控件QLineEdit

例子:录入个人信息

例子:使用正则表达式验证输入框的数据

例子:验证俩次输入密码一致

例子:切换显示代码


 输入类控件QLineEdit

  • QLineEdit 用来表示单行输入框,可以输入一段文本,但是不能换行

核心属性

属性说明

text

输⼊框中的⽂本

inputMask

输⼊内容格式约束

maxLength

最⼤⻓度

frame

是否添加边框

echoMode

显⽰⽅式.

  • QLineEdit::Normal :这是默认值,⽂本框会显⽰输⼊的⽂本。
  • QLineEdit::Password :在这种模式下,输⼊的字符会被隐藏,通常⽤星号(*)或等号(=)代替。
  • QLineEdit::NoEcho :在这种模式下,⽂本框不会显⽰任何输⼊的字符。

cursorPosition

光标所在位置

alignment

⽂字对⻬⽅式, 设置⽔平和垂直⽅向的对⻬.

dragEnabled

是否允许拖拽

readOnly

是否是只读的(不允许修改)

placeHolderText

当输⼊框内容为空的时候, 显⽰什么样的提⽰信息

clearButtonEnabled

是否会⾃动显⽰出 "清除按钮".

text属性,不仅仅可以通过代码来设置,用户在输入框中进行编辑,也会影响到text值的变化

(1)通过代码中设置text,界面上的文本会发生变化

(2) 直接操作修改界面上的文本(输入框、可以编辑的),text属性的值也会发生改变。

placeHolderText可以起到“提示作用”

当输入框为空的时候,没有任何内容的时候,提示信息才会存在。

一旦用户在这里进行任何动作输入,这个提示信息就会消失。  

clearButtonEnabled可以显示清空按钮!

如果输入框为空,此时没有任何显示。

当输入框有内容的时候,右侧就会出现一个类似于删除的按钮,点击按钮就会立即将输入框里面的内容清空。 

核心信号

属性说明

void cursorPositionChanged(int old, int new)

当⿏标移动时发出此信号,old为先前的位置,new为新位置。

void editingFinished()

当按返回或者回⻋键时,或者⾏编辑失去焦点时,发出此信号

void returnPressed()

当返回或回⻋键按下时发出此信号.

如果设置了验证器, 必须要验证通过, 才能触发.

void selectionChanged()

当选中的⽂本改变时,发出此信号。

void textChanged(const QString &text)

当QLineEdit中的⽂本改变时,发出此信号,text是新的⽂本。

代码对⽂本的修改能够触发这个信号.

void textEdited(const QString &text))

当QLineEdit中的⽂本改变时,发出此信号,text是新的⽂本。

代码对⽂本的修改不能触发这个信号.

例子:录入个人信息

让用户输入信息:

(1)姓名

(2)密码

(3)性别

(4)电话

通过提交按钮,把上述内容给统一获取到

使用Qt Designer进行初步设计,并修改objectName

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //初始化姓名输入框
    ui->lineEdit_name->setPlaceholderText("请输入姓名");
    ui->lineEdit_name->setClearButtonEnabled(true);
    //初始化密码输入框
    ui->lineEdit_password->setPlaceholderText("请输入密码");
    ui->lineEdit_password->setClearButtonEnabled(true);
    ui->lineEdit_password->setEchoMode(QLineEdit::Password);
    //初始化电话输入框
    ui->lineEdit_telephone->setPlaceholderText("请输入电话号码");
    ui->lineEdit_telephone->setClearButtonEnabled(true);
    ui->lineEdit_telephone->setInputMask("00000000000");
}

Widget::~Widget()
{
    delete ui;
}


void Widget::on_pushButton_clicked()
{
    QString gender = ui->radioButton_male->isChecked() ? "男" : "女";

    ui->label_information->setText("姓名:" + ui->lineEdit_name->text() + "\n"
                                   "密码:" + ui->lineEdit_password->text() + "\n"
                                   "性别:" + gender + "\n"
                                   "电话号码:" + ui->lineEdit_telephone->text() + "\n");
}

例子:使用正则表达式验证输入框的数据

在上一个例子中,验证电话号码的方式是使用inputMask,其功能比较有限,只能进行简单的验证,假设你输入:9999999999都是验证成功。

此时就需要“正则表达式”

“正则表达式”式计算机中的通用概念,和具体的编程语言无关。

正则表达式,本质上就是一个带有特殊字符的字符串,特殊字符用来表示另一个字符串的特征,此时就可以借助正则表达式来描述一些具有一定特定的字符串。

        基于这些特点,就可以完成字符串的匹配。

正则表达式文档:

正则表达式语法icon-default.png?t=N7T8https://learn.microsoft.com/zh-cn/previous-versions/visualstudio/visual-studio-2008/ae5bf541(v=vs.90)?redirectedfrom=MSDN正则表达式测试工具:

正则表达式测试工具icon-default.png?t=N7T8https://regextester.buyaocha.com/

此处的规则是:输入框要检查输入的内容是否是合法的手机号码。

如果是,则按钮设置为可用状态。

如果不是,则设置为禁用状态。

(1)在界面上设置一个输入框和按钮

(2)将按钮初始enabled设置成false

(3)给输入框设置验证器

使⽤ QRegExpValidator 创建⼀个验证器对象. Qt 中内置了四个主要的验证器对象

 

"^1\\d{d}$"

这是一段简单的验证手机号码的正则表达式。

^ 表示以XXX开头。

^ 后面紧跟着数字1,意思就是以1开头。

\d 表示数字,为了在C++字符串中使用,需要写作 \\d

{10}表示前面的内容重复出现了10次,\d数字要重复出现10次。

$ 表示结尾。

这里只是注册了一个验证器,下面还需要编写代码进行验证器的使用。

 (4)给 lineEdit 添加 textEdited 信号的 slot 函数

  • on_lineEdit_textEdited 的参数是当前输⼊框的内容.
  • 通过 lineEdit->validator() 获取到内置的验证器.

  • 通过 validate ⽅法验证⽂本是否符合要求

  • 第一个参数,是要验证的字符串,参数类型是QString&,不是const,需要将这个变量复制。
  • 第⼆个参数是⼀个 int&, 是输出型参数. 当验证的字符串不匹配时, 返回这个字符串的⻓度. (没有什么实质作⽤).{在这段代码中,pos 在这里通常被设置为 0 是因为你想要从输入内容的起始位置开始进行验证。}
  • 返回值是⼀个枚举. QValidator::Acceptable 表⽰验证通过, QValidator::Invalid 表⽰验证不通过.
#include "widget.h"
#include "ui_widget.h"

#include<QRegExpValidator>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //将按钮初始enabled设置为false
    ui->pushButton->setEnabled(false);

    //基于正则表达式进行验证
    QRegExp regExp("^1\\d{10}$");
    //给单行输入框设置验证器
    ui->lineEdit->setValidator(new QRegExpValidator(regExp));
}

Widget::~Widget()
{
    delete ui;
}


void Widget::on_lineEdit_textEdited(const QString &arg1)
{
    QString content = arg1;
    int pos = 0;
    if(ui->lineEdit->validator()->validate(content, pos) == QValidator::Acceptable)
    {
        //验证通过
        ui->pushButton->setEnabled(true);
    }
    else
    {
        //验证不通过
        ui->pushButton->setEnabled(false);
    }
}

例子:验证俩次输入密码一致

使用textEdited信号,来触发对于俩个输入框内容的判定。

接下来,结合之前的知识,来一次整合!!!

(1)设置俩个输入框,三个文本框 

(2)编写代码 

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //设置最上面的文本
    ui->label_1->setText("请设置密码:");
    //初始化第一个输入框
    ui->lineEdit_1->setPlaceholderText("请输入新密码");
    ui->lineEdit_1->setEchoMode(QLineEdit::Password);
    ui->lineEdit_1->setClearButtonEnabled(true);
    //设置第二个文本为空
    ui->label_2->setText(" ");
    //设置第二个输入框
    ui->lineEdit_2->setPlaceholderText("验证新密码");
    ui->lineEdit_2->setEchoMode(QLineEdit::Password);
    ui->lineEdit_2->setClearButtonEnabled(true);
    //设置迪桑文本为空
    ui->label_3->setText(" ");


}

Widget::~Widget()
{
    delete ui;
}


void Widget::on_lineEdit_1_textEdited(const QString &arg1)
{
    (void) arg1;
    QString s1 = ui->lineEdit_1->text();
    QString s2 = ui->lineEdit_2->text();
    if(!s1.isEmpty())
    {
        ui->label_2->setText("密码正确");
        ui->label_2->setStyleSheet("color: green;");
    }
}


void Widget::on_lineEdit_2_textEdited(const QString &arg1)
{
    (void) arg1;
    QString s1 = ui->lineEdit_1->text();
    QString s2 = ui->lineEdit_2->text();
    if(!s2.isEmpty())
    {
        if(s1 == s2)
        {
            ui->label_3->setText("密码正确");
            ui->label_3->setStyleSheet("color: green;");
        }
        else
        {
            ui->label_3->setText("密码错误");
            ui->label_3->setStyleSheet("color: red;");
        }
    }
}

 

上述例子中,俩次的参数都没有使用。

但是编译器在检查的时候会提出警告,所以可以将在函数内部写出:

(void) arg1;

这个写法就是类型转换,这个写法对于代码的实际逻辑是没有任何影响的,可以骗过编译器。

例子:切换显示代码

代码展示:

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //默认情况下,输入框以隐藏密码的形式显示
    ui->lineEdit->setEchoMode(QLineEdit::Password);
}

Widget::~Widget()
{
    delete ui;
}


void Widget::on_checkBox_toggled(bool checked)
{
    if(checked)
    {
        //true,表示需要显示密码
        ui->lineEdit->setEchoMode(QLineEdit::Normal);
    }
    else
    {
        //false,表示需要隐藏密码
        ui->lineEdit->setEchoMode((QLineEdit::Password));
    }
}

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

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

相关文章

ubuntu18.04更改系统语言及换源的方法步骤

ubuntu的虚拟机不知道第几次被玩崩溃了&#xff0c;无奈只好重装&#xff0c;这里记录下更改语言和换源的操作步骤。 一、更改系统语言为简体中文 1&#xff0c;点击虚拟机右上角的开始按钮&#xff0c;选择设置。 2&#xff0c;在左侧选项中选择Region & Language,再选择…

day28-测试自动化之Requests库的发送请求、响应内容、Cookie和session

目录 一、发送请求 1.1.GET请求 1).作用 2).步骤 3).响应对象 4).代码 5).带参代码 1.2.POST请求 1).作用 2).应用 3).参数 4).代码&#xff08;地址已失效&#xff09; 5).扩展 1.3.PUT请求 1).作用 2).应用 3).参数 4).响应 5).代码&#xff08;地址已失效&#xff09; 1.4.D…

DC-2综合渗透,rbash逃逸,git提权,wordpress靶场渗透教程

前言 博客主页&#xff1a;【h0ck1r丶羽】的公众号~~ ​ 本文主要讲解了渗透测试中的完整渗透测试流程&#xff0c;主要介绍了【wpscan】、【cewl】、【rbash逃逸】的使用技巧&#xff0c;靶场为vulnhub的机器大家可以自行下载&#xff0c;如果文章哪有不对&#xff0c;还请师…

大模型在应用开发安全左移实践

1.应用开发安全左移势在必行 近年来&#xff0c;应用系统被入侵或敏感信息泄漏类的安全事件时有发生&#xff0c;大部分安全事件的根本原因是应用软件设计或实现中存在安全漏洞。由于软件安全性问题导致各种信息泄密、信息被篡改、网络服务中断的事件频发&#xff0c;给企业和…

如何基于 langchain与 LLM 构建自己的知识库系统

如何基于 langchain与 LLM 构建自己的知识库系统 前些时候字节上了自己的扣子&#xff0c;用来构建我们自己的 agent AI 实战&#xff1a;手把手教你使用「扣子/coze」来搭建个人blog知识库 - 掘金 (juejin.cn)[1] 受到启发&#xff0c;想在本地或者自己的服务器上面搭建一个知…

机器学习第五十二周周报 Distribution Shift of GNN

文章目录 week52 Distribution Shift of GNN摘要Abstract一、文献阅读1. 题目2. Abstract3. 预测标准3.1 问题提出3.2 图结构3.3 分布转移 4. 文献解读4.1 Introduction4.2 创新点4.3 实验过程 5. 结论 二、若依框架1. 框架概述2. 核心功能 3. 技术栈4. 框架特点优缺点小结参考…

写作小白2024年逆袭,AI写作工具top4的正确打开方式

以前&#xff0c;人们总觉得写文章、编故事是人特有的本事&#xff0c;机器肯定搞不定。但现在&#xff0c;AI越来越牛&#xff0c;这些AI写作工具&#xff0c;用上了深度学习、自然语言处理这些高科技&#xff0c;能模仿人的思路来写东西。它们不仅能帮人写&#xff0c;有时候…

AI大模型日报#0822:OpenAI推GPT-4o微调服务、混元大模型负责人专访

导读&#xff1a;AI大模型日报&#xff0c;爬虫LLM自动生成&#xff0c;一文览尽每日AI大模型要点资讯&#xff01;目前采用“文心一言”&#xff08;ERNIE-4.0-8K-latest&#xff09;、“智谱AI”&#xff08;glm-4-0520&#xff09;生成了今日要点以及每条资讯的摘要。欢迎阅…

APO 集成生态exporter一键完成指标采集

Metrics 作为可观测性领域的三大支柱之一&#xff0c;Metrics数据采集显得尤为重要。传统的prometheus工具采集指标&#xff0c;需要指定路径抓取&#xff0c;当指标越来越多配置会显得复杂。同时prometheus只能采集指定的指标&#xff0c;当用户需要节点系统相关、中间件等指标…

虚幻5|制作一个木桩,含血量及伤害数字

一&#xff0c;基础设置 1.创建Actor蓝图类 2.编辑胶囊体和网格体的碰撞预设 3.打开敌人的角色蓝图&#xff0c;编辑飙血特效 二&#xff0c;创建敌人血量的ui&#xff0c;命名为敌人血量&#xff0c;如下 1. 2&#xff0c;打开后&#xff0c;添加一个画布画板和进度条&#…

为什么有了session和cookie还要使用JWT

session和cookie 为什么要使用session和cookie,他的流程是怎么样的 因为浏览器是无状态的,相当于每一次访问都是一次全新的访问,我们一般是登录来进行校验获取他的全部信息,所以会出现这个情况 这样当然也可以使用,但是很繁琐,并且影响性能,所以出现了session和cookie,他会生…

MDN边看边记

css css应用于文档的三种方法&#xff1a;使用外部样式表、使用内部样式表和使用内联样式。 css的层叠&#xff08;cascade&#xff09;和优先级&#xff08;specificity&#xff09;&#xff1a; 层叠&#xff1a; 在css中&#xff0c;顺序很重要&#xff0c;当应用两条同级…

苹果手机怎么连接蓝牙耳机?3个方案,3秒连接

在快节奏的现代生活中&#xff0c;无线蓝牙耳机因其便捷性和自由度成为了许多人的首选。那么&#xff0c;苹果手机怎么连接蓝牙耳机呢&#xff1f;本文将为您介绍3种快速连接苹果设备与蓝牙耳机的方案&#xff0c;让您在享受音乐、通话或观看视频时&#xff0c;不再受线缆束缚&…

‌无人机干扰技术及其法律约束

无人机作为一种先进的航空器&#xff0c;‌近年来在民用、‌商用、‌军事等领域得到了广泛应用。‌然而&#xff0c;‌随着无人机技术的不断发展&#xff0c;‌其受到的潜在威胁也日益增多。‌许多外部因素可以干扰无人机的正常运行&#xff0c;‌甚至导致其失控或坠毁。‌本文…

linux内核驱动流程

norflash:可线性访问(和内存的访问方式相同) nandflash: 不可线性访问&#xff0c;必须配个专门的程序访问 Linux启动: 1. 引导程序 bootloader&#xff0c;为内核启动准备环境 2.启动内核(kernel) 3. 加载根文件系统(挂载) 1.bootloader启动(裸机程序)--uboot.bin --为内…

[240822] X-CMD 发布 v0.4.7: 新增 htop 、btop 和 ncdu 模块;优化 colr 和 scoop 模块

X-CMD 发布 v0.4.7 目录 X-CMD 发布 v0.4.7&#x1f4c3;Changelog✨ htop✨ btop✨ ncdu✨ colr✨ scoop✅ 升级指南 &#x1f4c3;Changelog ✨ htop 新增 htop 模块。本模块优先使用环境中的 htop 命令&#xff1b;若当前环境没有 htop 命令&#xff0c;模块将使用 pixi 模…

线程池的构造以及相关方法

手写线程池 package cn.itcast.n8;import lombok.extern.slf4j.Slf4j; import org.springframework.core.log.LogDelegateFactory; import java.util.ArrayDeque; import java.util.Deque; import java.util.HashSet; import java.util.concurrent.TimeUnit; import java.util…

【卡码网C++基础课 6.数组的倒序与隔位输出】

目录 题目描述与分析一、数组二、Vector三、倒序输出数组四、隔位输出五、完整代码 题目描述与分析 题目描述&#xff1a; 给定一个整数数组&#xff0c;编写一个程序实现以下功能&#xff1a; 1.将输入的整数数组倒序输出&#xff0c;每个数之间用空格分隔。 2.从正序数组中&…

可视化大屏-实现自动滚动

一、背景&#xff1a;可视化大屏通常需要用到自动滚动的效果&#xff0c;本文主要采用的是vue-seamless-scroll组件来实现&#xff08;可参考官方文档&#xff09; 二、实现效果&#xff1a; 自动滚动 三、代码实现&#xff1a; 解题思路&#xff1a; 1.先安装依赖包 npm inst…

zTree 异步加载实现 点击加载

效果图如下 每级最多显示5000条数据&#xff0c;点击加载 会再次加载5000条数据 可以监听滚动条 动态加载 我这没实现这种方式。 <!-- ztreejs --> <script src".ztree/js/jquery.ztree.core.min.js" type"text/javascript"></script>…