【问题标题】:How do i get a QT validator to work correctly when pasting text?粘贴文本时如何让 QT 验证器正常工作?
【发布时间】:2019-04-10 17:21:46
【问题描述】:

我有一个 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(' ');
    }
};

【问题讨论】:

  • @eyllanescis 这不正是我正在使用的吗?我看不出你的正则表达式和我的有什么区别???
  • @eyllanesc 嗯,似乎不是拼写错误,它工作得很好......它只是一个原始的正则表达式,regExp 接受

标签: qt qml qt5 qvalidator


【解决方案1】:

似乎fixup 方法没有在QRegExpValidatorvalidate 方法中被调用。为了让它工作,我必须重新实现 validate 方法并在那里调用 fixup 方法,然后再调用父 validate 方法。

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

【讨论】:

  • 哥们,你真是个天才!谢谢!
  • 不错的解决方法,但根本不需要。请针对您用于输入文本的任何小部件/QQ2 组件提交错误报告。
猜你喜欢
  • 1970-01-01
  • 2019-03-17
  • 1970-01-01
  • 1970-01-01
  • 2020-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多