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

完整工程下載

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章