Qt限制文本框输入的方法

2023-11-17

在做界面编程的时候,对文本框的处理往往是个很头疼的事情,一是焦点进入文本框时,从人性化考虑,应选择文本框中文本,方便输入;二是,限制文本框的输入,只允许输入有效的文本,如果不这样做的话,那么就需要在程序中滤去非法输入。在这里介绍一种解决上述两个问题的方法:

#ifndef _EDIT_H
#define _EDIT_H

#include <qlineedit.h>

class CEdit : public QLineEdit {

    Q_OBJECT
public:
    CEdit(QWidget *parent);
    ~CEdit();
    enum tagValidatorType {
        vtFloat,
        vtInt,
        vtNoValidator,
    };
    void updateValidator(int type);

protected:
    void mousePressEvent(QMouseEvent *event);
    void focusInEvent(QFocusEvent *event);

private:
    int validatorType;
    bool bInit;
};
#endif

 CEdit派生自QLineEdit,重载focusInEvent,在这里实现选择文本框中的文本,解决上面的第一个问题;updateValidator方法实现限制文本框的输入,通过该函数,解决上面的第二个问题。下面我们来看实现:

#include "baseedit.h"
#include <QRegExpValidator>
CEdit::CEdit(QWidget *parent) : QLineEdit(parent)
{
    setAlignment(Qt::AlignCenter);
    validatorType = vtNoValidator;
    bInit = false;
}

CEdit::~CEdit()
{

}

void CEdit::updateValidator(int type)
{
    if (type != validatorType)
    {
        validatorType = type;
        switch(type)
        {
        case vtFloat:
            {
                QRegExp rx("^(-?[0]|-?[1-9][0-9]{0,5})(?:\\.\\d{1,4})?$|(^\\t?$)");
                QRegExpValidator *pReg = new QRegExpValidator(rx, this);
                setValidator(pReg);
            }
            break;
        case vtInt:
            {
                QRegExp rx("^([1-9][0-9]{0,3}|[1-5][0-9]{0,4}|[1-6][0-4][0-9]{0,3}|[1-6][0-5][0-4][0-9]{0,2}|[1-6][0-5][0-5][0-2][0-9]{0,1}|[1-6][0-5][0-5][0-3][0-5])$|(^\\t?$)");
                QRegExpValidator *pReg = new QRegExpValidator(rx, this);
                setValidator(pReg);
            }
            break;
        }
    }
}

void CEdit::mousePressEvent(QMouseEvent *event)
{
    if (bInit)
        bInit = false;
    else
        QLineEdit::mousePressEvent(event);
}

void CEdit::focusInEvent(QFocusEvent *event)
{
    QLineEdit::focusInEvent(event);
    QString str = text();
    setSelection(0, str.length());
    bInit = true;
}

首先来看updateValidator,当type=vtFloat时,浮点数的限制范围为[-999999.9999,999999.9999];当type=vtInt时,整数的输入范围为[1,65535]。大家也可以根据自己的要求,通过设置对应的正则表达式来设置自己的限制条件,如果你不懂正则表达式的话,可以baidu下,很简单的。好了我们再来看看focusInEvent,这个重载QLineEdit编辑框的焦点进入事件,在里面选择文本,这里的bInit变量是为了防止mousePressEvent把在focusInEvent里面选择的文本取消,因为焦点进入事件比mousePressEvent事件响应的早。

到这里,本文开头提的两个问题都解决了。下面是使用CEdit了:

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    CEdit edit;
    edit.updateValidator(CEdit::vtInt);
    edit.resize(40, 120);
    edit.show();
    app.exec();
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt限制文本框输入的方法 的相关文章

  • 常用运放电路计算与分析

    常用运放电路计算与分析 1 运放的符号表示 2 集成运算放大器的技术指标 1 开环差模电压放大倍数 开环增益 大 Ao Ad Vo V V 107 1012倍 2 共模抑制比高 KCMRR 100db以上 3 输入电阻大 ri gt 1MW
  • 区块链是生命体、经济体。未来的区块链世界离不开自己的价值尺度建设

    想知道更多区块链技术知识 请百度 链客区块链技术问答社区 链客 有问必答 公有链和联盟链的本质不同 区块链受到大家广泛关注应该是2015年10月 那时候万向在上海搞了一场区块链国际峰会 因为万向在整个金融界比较有影响力 加上 经济学人 在1
  • 数据库的安全性、完整性、并发控制和恢复

    数据库的安全性 完整性 并发控制和恢复from http bbs chinaunix net viewthread php tid 188100 为了保证数据库数据的安全可靠性和正确有效 DBMS必须提供统一的数据保护功能 数据保护也为数据
  • syskey (win7启动密码)加密和破解方法

    1 什么是syskey Syskey是NT Service Pack 3中带的一个工具 用来保护SAM数据库不被离线破解 用过去的加密机制 如果攻击者能够得到一份加密过的SAM库的拷贝 他就能够在自己的机器上来破解用户口令 2 如何开启sy
  • 对开发来讲,业务重要还是技术重要?

    很多开发者为天天写业务代码无暇提升技术而焦虑 苦恼 比如 又如 又如 再如 那么 作为开发者 到底该怎么面对 写业务代码 这件事呢 今天我们就从以下几个方面聊聊这个话题 什么是业务 业务和技术的关系 业务和因解决业务而衍生的业务 对业务的态
  • QTableView的表格项中加入图标的方法

    当在使用表格视图的时候 需要在表格每一行前面加入图标 应该怎么做呢 Qt中通过使用MVC的处理方式 很容易做到这一点 具体实现如下 先贴出图 让大家一睹为快 下面我就来介绍一下 上图的灯泡是怎么实现的 通过重载QAbstractTableM
  • 【零知ESP8266教程】AP模式下WIFI UDP协议通信示例

    本帖主要讲解ESP8266 WIFI功能关于UDP协议网络传输的应用 这里演示了ESP8266在AP模式下UDP通信的示例 1 硬件 零知ESP8266开发板 2 软件 1 代码如下 文件 udp server ino by 零知实验室 u
  • Cocos2d-x 3.x部署

    这是我第一次写技术文章 这里只是分享一下我的部署经验 请各位参考 谢谢 我简单的写写我的部署步骤 只参考了官方的readme 环境 win7 64位 1 打开控制台cmd 2 进入到cocos2d x引擎目录 键入setup py 键入的前
  • 郑州大学校园网故障问题解决方法

    1 郑州大学校园网学生用户使用指南 可进入郑州大学网络管理中心网站 校园网交流QQ群 群一475137403 群二685466506 微信公众号 郑州大学网络管理中心 一 校园网注册 1 微信扫码并关注 郑州大学网络管理中心 点击进入微信公
  • d指针在Qt上的应用及实现

    Qt为了使其动态库最大程度上实现二进制兼容 引入了d指针的概念 那么为什么d指针能实现二进制兼容呢 为了回答这个问题 首先弄清楚什么是二进制兼容 所谓二进制兼容动态库 指的是一个在老版本库下运行的程序 在不经过编译的情况下 仍然能够在新的版
  • 程序员技术面常用知识点

    转自 http blog csdn net qq 15437629 article details 52388685 在这里只做备份 计算机网络 TCP IP 模型 TCP IP协议集的分层实施 为什么要给网络划分层次 1 各层之间相对独立
  • 聊一聊全景图

    欢迎大家前往腾讯云社区 获取更多腾讯海量技术实践干货哦 作者 李洋 前段时间学习了ThreeJS项目里边关于全景图的案例之后 自己动手练习了一下 实现了两个全景图的例子 分别如下 WebGLRender 球型全景图 WebGLRender
  • 机器人 串口配置文件serial.INI

    SERIAL INI Configuration of the serial ports and their protocols Lindemann 27 02 2002 KUKA Controls update comments and
  • Qt限制文本框输入的方法

    在做界面编程的时候 对文本框的处理往往是个很头疼的事情 一是焦点进入文本框时 从人性化考虑 应选择文本框中文本 方便输入 二是 限制文本框的输入 只允许输入有效的文本 如果不这样做的话 那么就需要在程序中滤去非法输入 在这里介绍一种解决上述
  • 区块链三加一:深度论区块链的联盟链意义与作用

    随着区块链技术的发展 越来越受个人及企业的关注 而和区块链联系最为紧密的 恐怕就是金融行业了 然而虽然区块链大受热捧 但毕竟区块链是属于公有区块链 公有区块链有着其不可编辑 不可篡改的特点 这就使得公有链并不适合企业使用了 毕竟如果某金融企
  • mysql 字符集问题整理

    mysql 字符集问题整理 一直对mysql字符集没有明确的概念 mysql为了方便 设置了各种层级的字符集 最近在移植mat数据库时 顺便把这个问题整理清楚 供参考和学习 文章最后有word版本 有两张图片以及不同文字的颜色区分 首先是M
  • kafka + zookeeper下载/安装/使用(超详细)

    kafka是需要zk来支持 所以先下载zk 1 下载安装zookeeper 下载地址 选择不带source的 下载下来解压2次 进入到 D zookeeper apache zookeeper 3 6 1 bin conf 目录下 把zoo
  • Docker-swarm 介绍,集群,多服务部署实战

    一 什么是Docker Swarm Swarm是Docker公司推出的用来管理docker集群的平台 几乎全部用GO语言来完成的开发的 代码开源在https github com docker swarm 它是将一群Docker宿主机变成一
  • linux中mysql启动服务命令(合集)

    linux的mysql启动服务命令 linux的mysql启动服务命令1 使用mysqld启动 关闭MySQL服务 mysqld是MySQL的守护进程 我们可以用mysqld来启动 关闭MySQL服务 关于mysqld MySQL 5 6官
  • 一致性哈希算法,hash(key)是负值时,会出现异常吗?

    一致性哈希算法 hash key 是负值时 会出现异常吗 一致性哈希算法中 哈希函数hash key 的返回值通常是一个非负整数 如果hash key 返回负值 则可能会出现一些问题 例如无法正确地映射对象到哈希环上的位置 或者无法正确地找

随机推荐

  • 【Spark系列2】reduceByKey和groupByKey区别与用法

    在spark中 我们知道一切的操作都是基于RDD的 在使用中 RDD有一种非常特殊也是非常实用的format pair RDD 即RDD的每一行是 key value 的格式 这种格式很像Python的字典类型 便于针对key进行一些处理
  • 微前端--qiankun原理概述

    demo放最后了 一 微前端 一 微前端概述 微前端概念是从微服务概念扩展而来的 摒弃大型单体方式 将前端整体分解为小而简单的块 这些块可以独立开发 测试和部署 同时仍然聚合为一个产品出现在客户面前 可以理解微前端是一种将多个可独立交付的小
  • Android 热补丁动态修复框架小结

    转载 http blog csdn net xdgaozhan article details 51848570 一 概述 最新github上开源了很多热补丁动态修复框架 大致有 https github com dodola HotFix
  • Python与OpenCV(三)——基于光流法的运动目标检测程序分析

    光流的概念是指在连续的两帧图像当中 由于图像中的物体移动或者摄像头的移动而使得图像中的目标形成的矢量运动轨迹叫做光流 本质上光流是个向量场 表示了一个像素点从第一帧过渡到第二帧的运动过程 体现该像素点在成像平面上的瞬时速度 而当我们对图像当
  • oracle 游标 上限,ORA-01000: 超出打开游标的最大数

    语言 java 数据库 oracle 开发中通过jdbc做批量删除对象时 出现了如下异常 java sql SQLException ORA 01000 超出打开游标的最大数 at oracle jdbc driver T4CTTIoer
  • UE5_创建C++项目报错

    UE官方VS安装推荐 https docs unrealengine com 4 26 en US ProductionPipelines DevelopmentSetup VisualStudioSetup UE5报错 A fatal e
  • 下拉框怎么用ajax实现添加功能,ajax实现动态下拉框示例

    许多页面上都涉及有下拉框 即select标签 对于简单的下拉框 被选择的数据是不需要改变的 我们可以用写死 这样下拉框的数据永远都是那几条 示例 信息一 信息二 信息三 信息四 但是有些项目或者工程是需要将数据库中的数据呈现出来并提供选择的
  • CH3-栈和队列

    文章目录 3 1栈和队列的定义和特点 栈的应用 队列的应用 3 1 1栈的定义和特点 3 1 2队列的定义和特点 3 2案例引入 案例3 1 进制转换 案例3 2 括号匹配的检验 案例3 3 表达式求值 案例3 4 舞伴问题 3 3栈的表示
  • 网络传输方式

    1 单播 1 1 定义 单播是指一种向单个目标地址传送数据的方式 即单独的一对一通讯方式 1 2 可使用协议 UDP TCP等协议 1 3 常见的场景 发送电子邮件 传输文件 2 广播 2 1 定义 一种向本地网络中所有设备发送数据的方式
  • FISCO BCOS 三、多群组部署以及新节点加入群组

    本章主要以星形组网和并行多组组网拓扑为例 指导您了解如下内容 了解如何使用build chain sh创建多群组区块链安装包 了解build chain sh创建的多群组区块链安装包目录组织形式 学习如何启动该区块链节点 并通过日志查看各群
  • 正确加载 Javascript 和 CSS 到 WordPress

    原文 http technerdia com 1789 include jquery css html 正确加载 jQuery Javascript 和 CSS 到你的WordPress网站也许是一件比较痛苦的事情 本文将讲解如何使用Wor
  • 使用python处理selenium中的获取元素属性

    获取我的订单元素class属性值 get class name driver find element by link text 我的订单 get attribute class 判断class属性值是否为active self asser
  • 深度学习半自动化视频标注工具——VATIC使用教程

    Vatic简介 Vatic是一个带有目标跟踪的半自动化视频标注工具 适合目标检测任务的标注工作 输入一段视频 支持自动抽取成粒度合适的标注任务并在流程上支持接入亚马逊的众包平台Mechanical Turk 当然也可以自己在本地标注 最大的
  • 使用markdown写大论文

    目的 用自己中意的 Markdown 编辑器来写论文初稿 使用 Zotero 来管理大量参考文献 然后论文转换成 Office Word 文档让老师们查看 当 Markdown 内容并转换成 Word 格式后 所有引用都需要被 Zotero
  • 【BraTS】Brain Tumor Segmentation 脑部肿瘤分割3--构建数据流

    往期回顾 BraTS Brain Tumor Segmentation 脑部肿瘤分割1 数据篇 BraTS Brain Tumor Segmentation 脑部肿瘤分割2 UNet的复现 在上一篇网络复现中提到 输入图像变成 4 155
  • OSG学习:纹理映射(四)——三维纹理映射

    以下内容来自 1 OpenSceneGraph三维渲染引擎编程指南 肖鹏 刘更代 徐明亮 清华大学出版社 2 OpenSceneGraph三维渲染引擎设计与实践 王锐 钱学雷 清华大学出版社 3 自己的总结 下载完整工程OSG 12 Tex
  • 基于区块链的分布式存储系统开发论文研究

    基于区块链的分布式存储系统开发论文研究 一 论文一 基于区块链的应用系统开发方法研究 蔡维德 论文引用 1 蔡维德 郁莲 王荣 刘娜 邓恩艳 基于区块链的应用系统开发方法研究 J 软件学报 2017 28 06 1474 1487 1 区块
  • 数据结构之二叉查找树(Binary Search Tree)和红黑树(Red Black Tree)

    感兴趣的话大家可以关注一下公众号 猿人刘先生 欢迎大家一起学习 一起进步 一起来交流吧 二叉查找树 Binary Search Tree 二叉查找树又可以称之为 二叉搜索树 二叉排序树 它或者是一棵空树 或者是具有下列性质的二叉树 若它的左
  • jsoup的Elements类

    随时随地阅读更多技术实战干货 获取项目源码 学习资料 请关注源代码社区公众号 ydmsq666 一 简介 该类是位于select包下 直接继承自Object 所有实现的接口有Cloneable Iterable
  • Qt限制文本框输入的方法

    在做界面编程的时候 对文本框的处理往往是个很头疼的事情 一是焦点进入文本框时 从人性化考虑 应选择文本框中文本 方便输入 二是 限制文本框的输入 只允许输入有效的文本 如果不这样做的话 那么就需要在程序中滤去非法输入 在这里介绍一种解决上述