1

我在 Qt c++ 源代码的帮助下构建了一个 ASCIIValidator,它依赖于 QRegularExpression 类而不是它们的旧 QRegExp 对应物。举个例子,请看一下https://github.com/qt/qtbase/blob/dev/src/gui/util/qvalidator.cpp的第 916 行

class ASCIIValidator(QtGui.QRegularExpressionValidator):
    def __init__(self):
        super(ASCIIValidator, self).__init__()
        self.description = ""
        self.invalidInputMsg = ""

        self.regex = QtCore.QRegularExpression(r"[^\x00-\x7F]")
        self.setRegularExpression(self.regex)
        self.regex.setCaseSensitivity(QtCore.Qt.CaseInsensitive)
        
    
    def validate(self, _input: str, pos: int) -> QtGui.QValidator.State:
        if self.regularExpression().pattern().isEmpty():
            return QtGui.QValidator.Acceptable
        
        match = self.regularExpression().match(_input, 0, QtCore.QRegularExpression.PartialPreferCompleteMatch)
        if match.hasMatch(): # means that a non-ascii character has been foound
            return QtGui.QValidator.Invalid
        else:
            return QtGui.QValidator.Acceptable

引发以下错误:

    from util.UValidator import UValidator
  File ".....\UValidator.py", line 38, in <module>
    class ASCIIValidator(QtGui.QRegularExpressionValidator):
AttributeError: module 'PySide2.QtGui' has no attribute 'QRegularExpressionValidator'

但是,Qtdocs 和 PySide2 文档将 QRegularExpressionValidator 列为 QtGui 的一部分,甚至建议在旧的 QRegExp 类上使用它们。我正在使用最新的 python3 和通过 pip 安装的 pyside2。编辑:使用 PySide 5.15

4

0 回答 0