首页 > 解决方案 > 粘贴文本时如何让 QT 验证器正常工作?

问题描述

我有一个 QT QRegExpValidatorRegExpValidator在 QML 中),它将我的文本输入限制为仅限字母数字内容。

但是,当用户将字符串粘贴到 myTextField中时,有时这些字符串以换行符结尾,验证失败,因此字符串永远不会被粘贴。

我已经读过,实现该fixup方法使您有机会清理字符串,以便它们与验证器一起正常工作。但是,这在粘贴时似乎不起作用 - 字符串仍然没有被粘贴。

我如何让它以我想要的方式工作?

我的代码如下所示:

LoginValidator { id: alphaNumValidator; regExp: /(?:[0-9A-Za-z])+$/ }

实现LoginValidator如下:

class LoginValidator : public QRegExpValidator
{
    Q_OBJECT
public:

    virtual void fixup(QString &input) const override
    {
        input = input.simplified().remove(' ');
    }
};

标签: qtqmlqt5qvalidator

解决方案


似乎该fixup方法没有在 a 的validate方法中被调用QRegExpValidator。为了让它工作,我必须validate在调用父方法之前重新实现该方法并在那里调用 fixupvalidate方法。

QValidator::State LoginValidator::validate(QString &input, int &pos) const
{
  fixup(input);
  return QRegExpValidator::validate(input, pos);
}

推荐阅读