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