QTextEdit只接受数字输入

QTextEdit只接受数字输入
最近楼主在工作中遇到一个需求,需要输入几组数字码,以换行符区分,本想着QTextEdit里面有setValidator方法,直接正则表达式一步搞定,可惜查了半天文档也没有找到,只能另找出路…
思路:只接受数字输入->也就是只响应数字键->键盘事件
有了以上的思路,其实方法也就出来了,一是重写键盘按下事件,二是使用事件过滤器,话不多说,这就上代码
1.使用过滤器
先新建一个Qt工程,并添加一个textEdit
在这里插入图片描述
添加textEdit
运行结果
在这里插入图片描述
核心代码

bool Widget::eventFilter(QObject *watched, QEvent *event)
{
    if(watched == ui->textEdit &&event->type() == QEvent::KeyPress)
    {
        QKeyEvent *keyPressed = static_cast<QKeyEvent*>(event);
        if(numList.contains(keyPressed->key()))
        {
            qDebug()<<"按下的按键为:"<<keyPressed->text()<<"-允许输入";
            return false;
        }
        else
        {
            qDebug()<<"按下的按键为:"<<keyPressed->text()<<"-不允许输入";
            return true;
        }
    }
}

2.重写按键事件(可作为提升用)
核心代码

void InputNumTextEdit::keyPressEvent(QKeyEvent *e)
{
	if (inputNumList.contains(e->key()))
		QTextEdit::keyPressEvent(e);
	else
		e->ignore();
}

完整工程下载

猜你喜欢

转载自blog.csdn.net/Joker__123/article/details/106741211