粘贴文本时,如何使QT验证器正常工作?

粘贴文本时,如何使QT验证器正常工作?,qt,qml,qt5,qvalidator,Qt,Qml,Qt5,Qvalidator,我有一个QTQRegExpValidator(QML中的RegExpValidator),它将我的文本输入仅限于字母数字内容 但是,当用户将字符串粘贴到myTextField中时,有时这些字符串以换行符结尾,这会导致验证失败,因此字符串永远不会被粘贴 我已经读到,实现fixup方法可以让您有机会清理字符串,以便它们能够与验证器正常工作。但是,粘贴时这似乎不起作用-字符串仍然不会被粘贴 我怎样才能让它按我想要的方式工作 我的代码如下所示: LoginValidator { id: alphaNum

我有一个QT
QRegExpValidator
(QML中的
RegExpValidator
),它将我的文本输入仅限于字母数字内容

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

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

我怎样才能让它按我想要的方式工作

我的代码如下所示:

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

    virtual void fixup(QString &input) const override
    {
        input = input.simplified().remove(' ');
    }
};
LoginValidator
的实现如下所示:

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

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

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

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

@这不正是我在用的吗?我看不出你的正则表达式和我的正则表达式有什么区别@eyllanesc嗯,看起来不是打字错误,它工作得很好…它只是一个原始正则表达式,它
regExp
accepts你是个天才!谢谢很好的解决方法,但根本不需要。请针对您用于输入文本的任何widget/QQ2组件提交错误报告。