Qt 解決QLineEdit設置QValidator之後,某些信號不能正常連接的情況

1.QLineEdit

某些時候我們需要限制QlineEdit的輸入格式,比如只能輸入數字、只能輸入英文,這個時候需要設置正則表達式。例:

//設置只能輸入數字
QRegExpValidator *pRevalidotor = new QRegExpValidator(QRegExp("[0-9]{20}"), this);
ui.lineEdit->setValidator(pRevalidotor); 

在設置QValidator之後,會導致QLineEdit裏的信號editingFinished()、returnPressed()等不能正常與外界綁定的槽不能正常連通。

這個時候需要這樣做:

1.安裝事件過濾器ui.lineEdit->installEventFilter(this);

2.重寫bool eventFilter(QObject *target, QEvent *event);

bool eventFilter(QObject *target, QEvent *event)
{
    if (target == ui.lineEdit && event->type() == QEvent::FocusIn)
    {    
        //設置只能輸入數字
        QRegExpValidator *pRevalidotor = new QRegExpValidator(QRegExp("[0-9]{20}"), this);
        ui.lineEdit ->setValidator(pRevalidotor);
        ui.lineEdit ->setAttribute(Qt::WA_InputMethodEnabled, false);
    }
    if (target == ui.lineEdit && event->type() == QEvent::FocusOut)
    {
        if (ui.lineEdit ->validator() != nullptr)
        {
            delete ui.lineEdit ->validator();
            ui.lineEdit ->setValidator(nullptr);
        }  
    }
    return QWidget::eventFilter(target, event);
}

大家覺得OK,請點個贊👍👍👍,謝謝。

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