失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > QT限制文本框输入的方法

QT限制文本框输入的方法

时间:2024-05-24 15:51:04

相关推荐

QT限制文本框输入的方法

QT限制文本框输入的方法

界面编程的时候,对文本框的处理往往是个很头疼的事情:

一是焦点进入文本框时,从人性化考虑,应选择文本框中文本,方便输入;

二是,限制文本框的输入,只允许输入有效的文本,如果不这样做的话,那么就需要在程序中滤去非法输入。

在这里介绍一种解决上述两个问题的方法:

#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]。大家也可以根据自己要求,通过设置对应的正则表达式来设置自己的限制条件。再来看看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();

}

如果觉得《QT限制文本框输入的方法》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。