粘贴文本时如何让 QT 验证器正常工作?
How do i get a QT validator to work correctly when pasting text?
我有一个 QT QRegExpValidator
(QML 中的 RegExpValidator
),它将我的文本输入限制为仅字母数字内容。
但是,当用户将字符串粘贴到我的 TextField
中时,有时这些字符串以换行符结尾,验证失败,因此永远不会粘贴该字符串。
我读到实施 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(' ');
}
};
fixup
方法似乎没有在 QRegExpValidator
的 validate
方法中调用。为了让它工作,我必须重新实现 validate
方法并在调用父 validate
方法之前调用 fixup 方法。
QValidator::State LoginValidator::validate(QString &input, int &pos) const
{
fixup(input);
return QRegExpValidator::validate(input, pos);
}
我有一个 QT QRegExpValidator
(QML 中的 RegExpValidator
),它将我的文本输入限制为仅字母数字内容。
但是,当用户将字符串粘贴到我的 TextField
中时,有时这些字符串以换行符结尾,验证失败,因此永远不会粘贴该字符串。
我读到实施 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(' ');
}
};
fixup
方法似乎没有在 QRegExpValidator
的 validate
方法中调用。为了让它工作,我必须重新实现 validate
方法并在调用父 validate
方法之前调用 fixup 方法。
QValidator::State LoginValidator::validate(QString &input, int &pos) const
{
fixup(input);
return QRegExpValidator::validate(input, pos);
}