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();
}