QLineEdit输入检查 hasAcceptableInput

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

QLineEdit输入检查 hasAcceptableInput


前言

提示:通过正则表达式检查QlineEdit的内容:
Qt提供了三个许可器类:QIntValidator,QDoubleValidator和QRegExpValidator。这里我们使用了QRegExpValidator,QLineEdit::hasacceptableinput通过许可器检查输入内容是否合法。


提示:以下是本篇文章正文内容,下面案例可供参考

一、许可器是什么?

示例:在构造函数中,我们还创建一个许可器(validator)限制编辑框输入的范围。Qt提供了三个许可器类:QIntValidator,QDoubleValidator和QRegExpValidator。这里我们使用了QRegExpValidator,使用的表达式为“[A-Za-z][1-9][0-9]{0,2}”这个表达式的意思是第一个字符输入为大写或者小写字母,第二个字符为一个数字范围是1到9,第三个字符是一个数字范围为0到9。在QRegExpValidator的构造函数中,第二个参数为this,把当前类作为它的父控件,这样就可以不用删除它,父控件析构时可以被自动删除。

二、使用步骤

代码如下(示例):

#ifndef GOTOCELLDIALOG_H
 #define GOTOCELLDIALOG_H
 #include <QDialog>
 #include "ui_gotocelldialog.h"
 class GoToCellDialog : public QDialog, public Ui::GoToCellDialog
 {
     Q_OBJECT
 public:
     GoToCellDialog(QWidget *parent = 0);
 private slots:
     void on_lineEdit_textChanged();
 };
 #endif
 新建gotocelldialog.cpp源文件,实现这个类:
 #include <QtGui>
 #include "gotocelldialog.h"
 GoToCellDialog::GoToCellDialog(QWidget *parent)
     : QDialog(parent)
 {
     setupUi(this);
     QRegExp regExp("[A-Za-z][1-9][0-9]{0,2}");
     lineEdit->setValidator(new QRegExpValidator(regExp, this));
     connect(okButton, SIGNAL(clicked()), this, SLOT(accept()));
     connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject()));
 }
 void GoToCellDialog::on_lineEdit_textChanged()
 {
     okButton->setEnabled(lineEdit->hasAcceptableInput());
 }

color=#999AAA >该处使用的url网络请求的数据。

<hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">

# 总结
<font color=#999AAA >提示:这里对文章进行总结:
在构造函数中,我们调用setupUi()初始化这个对话框。由于多继承,我们可以直接使Ui::GoToCellDialog的成员。创建了用户界面以后,我们可以把子控件的信号和槽函数连接起来。
 在构造函数中,我们还创建一个许可器(validator)限制编辑框输入的范围。Qt提供了三个许可器类:QIntValidator,QDoubleValidator和QRegExpValidator。这里我们使用了QRegExpValidator,使用的表达式为“[A-Za-z][1-9][0-9]{0,2}”这个表达式的意思是第一个字符输入为大写或者小写字母,第二个字符为一个数字范围是19,第三个字符是一个数字范围为09。在QRegExpValidator的构造函数中,第二个参数为this,把当前类作为它的父控件,这样就可以不用删除它,父控件析构时可以被自动删除。
 Qt的父子机制在QObject中实现的。当我们创建一个带有父的对象(如一个子控件,一个许可器,布局管理器等)时,父对象把子对象放到自己的子对象列表中。父对象被删除时,它查找自己的子对象并把每一个删除掉。这些子对象再把自己的子对象删除掉,如此递归,知道删除所有对象。
 这种父子对象的机制简化了内存管理,减少了内存泄漏的危险。需要程序员删除的对象就是我们使用new创建的没有父对象的对象。如果我们在父对象存在时删除了它的一个子对象,Qt将会在父列表中自动删除。(需要记住的是Qt只是删除有父的对象,父对象还是需要手动删除的,还有就是那些用new申请的没有指定父的内存,一般情况下,在对话框里的子控件,许可器和布局管理器由Qt自己管理,其他还要程序员小心删除)
 对于控件来讲,父对象还有一个意义:子控件在父对象的显示区域内显示。当父控件删除后,子控件不但在内存中被删除,它也同时在屏幕上消失。
 在构造函数的最后两行,把QDialog的accept()函数连接到OK按钮的点击信号,把Cancel按钮的点击信号连接到reject()函数。这两个槽函数都关闭这个对话框,但是accept()返回 QDialog::Accepted(值为1),reject()返回值为QDialog::Rejected(值为0)。不同的返回值可以判断用户点击了那个按钮。
  
on_lineEdit_textChanged()槽函数控制Ok按钮的可用状态,通过编辑框中的输入字符,如果字符有效Ok按钮则有效,否则为不可用状态。QLineEdit::hasAcceptableInput()根据我们在构造函数中设置的许可器返回bool值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值