Qt限制文本框输入的方法(使用QRegExpValidator,为QLineEdit所独有)
在做界面编程的时候,对文本框的处理往往是个很头疼的事情,一是焦点进入文本框时,从人性化考虑,应选择文本框中文本,方便输入;二是,限制文本框的输入,只允许输入有效的文本,如果不这样做的话,那么就需要在程序中滤去非法输入。在这里介绍一种解决上述两个问题的方法:
- #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();
- }
http://blog.csdn.net/rabinsong/article/details/8932713
一个更具体的实例:
http://blog.csdn.net/rabinsong/article/details/8997181
Qt限制文本框输入的方法(使用QRegExpValidator,为QLineEdit所独有)的更多相关文章
- QT控制文本框输入内容
利用正则表达式,例: //即账号最长为10位,只能由数字组成 QRegExp regx("[0-9]{1,10}"); QValidator *validator = new QR ...
- Qt QComBox 文本框输入itemText && 文本框查找item && 本文框添加Item &&设置显示Item数量
comBox的几种状态图如下: 图1:ui->comboBox->setEditable(true); 图2:ui->comboBox->setEditable(false ...
- jquery正则表达式显示文本框输入范围 只能输入数字、小数、汉字、英文字母的方法
正则表达式限制文本框只能输入数字 许多时候我们在制作表单时需要限制文本框输入内容的类型,下面我们用正则表达式限制文本框只能输入数字.小数点.英文字母.汉字等各类代码.1.文本框只能输入数字代码(小数点 ...
- jQuery实现限制input框 textarea文本框输入字符数量的方法
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- 监听文本框输入开发仿新浪微博限制输入字数的textarea插件
监听文本框输入 Firefox.Chrome.IE9,IE10 均支持 oninput 事件,此外所有版本的 IE 均支持 onpropertychange 事件. oninput 事件在用户输入.退 ...
- js入门-文本框输入特定内容控制另一个文本框
在填写表单时,有时需要某些文本框隐藏,当一文本框输入特定内容时才会显示隐藏的文本框,这一功能可以用onchange事件或oninput事件实现.下面对比下两种方法实现的区别: onchange()定义 ...
- 转:zTree树控件扩展篇:巧用zTree控件实现文本框输入关键词自动模糊查找zTree树节点实现模糊匹配下拉选择效果
是否可以借助于zTree实现文本框输入关键词自动模糊匹配zTree下拉树,然后选择下拉树内节点显示在文本框内且隐藏下拉树. 看到这个需求脑子里头大致已经想到了要如何实现这样一个需求,当时是限于时间问题 ...
- HTML如何禁止文本框输入
禁止文本框输入有以下两种方法: 1,设置input为只读状态,代码如下: <input readonly="readonly" value="test1" ...
- JS文本框输入限制
1上面的文本框只能输入数字代码(小数点也不能输入): CODE: <input onkeyup="this.value=this.value.replace(/\D/g,'')&quo ...
随机推荐
- yum update
Linux升级命令有两个分别是yum upgrade和yum update, 这个两个命令是有区别的:代码如下:yum -y update升级所有包同时也升级软件和系统内核 代码如下:yum -y u ...
- oracle ORA-00913: 值过多
--oracle中查看表是否被锁 查看表是否被锁 SELECT /*+ rule*/ a.sid, b.owner, object_name, object_type FROM v$loc ...
- JavaWeb核心编程之使用Eclipse开发JavaWEB项目
文章目录 1.eclipse切换到javaee项目 2.创建服务器(如果没有server选项, 怎么做) 3.定制新建面板内容 4.创建动态web工程 1.eclipse切换到javaee项目 如图 ...
- ExtJS4.2 Ext.grid.panel Store更改后刷新表格
//////////////////////// // Prepare store //////////////////////// // prepare fields and columns var ...
- Apache新版配置虚拟主机的注意事项
1.关于没有默认索引文件(index.php或者index.html)时,列出目录:需要开启模块 LoadModule autoindex_module modules/mod_autoindex.s ...
- javascript中的for……in循环
<script type="text/javascript"> var theBeatles=new Array("John","P ...
- 自定义UITextField(UITextField重写)
// CustomField.h #import <UIKit/UIKit.h> @interface CustomField : UITextField @end // CustomFi ...
- poj1833---字典序算法
题意:给定一个序列,求它的下k个排列 #include <stdio.h> #include <stdlib.h> int cmp(const void *a,const vo ...
- &&与||的用法总结
a() && b() :如果执行a()后返回true,则执行b()并返回b的值:如果执行a()后返回false,则整个表达式返回a()的值,b()不执行: a() || b() :如果 ...
- 在Mac上配置Apache+PHP环境
1.启用Apache/Web共享 打开终端,运行启动Apache命令: sudo apachectl start 然后输入系统密码,运行成功. 关闭命令: sudo apachectl stop 重启 ...