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