QLineEdit を作成し、それにカスタム QValidator をアタッチしました。fixup()
QValidatorに関数を追加しようとしました。QLineEdit にテキストを入力すると、 が呼び出されvalidate()
、次に が呼び出されfixup()
、最後にvalidate()
もう一度呼び出されますが、修正前のテキストのままです。私は何を間違えましたか?フィックスアップによって QLineEdit が更新されないのはなぜですか?
mylineedit = QtGui.QLineEdit()
mylineedit.setValidator(MyValidator())
class MyValidator(QtGui.QRegExpValidator):
def __init__(self, parent=None):
rx = QtCore.QRegExp('\\d+ m')
super().__init__(rx, parent)
def validate(self, text, pos):
r = super().validate(text, pos)
print(r)
return r
def fixup(self, text):
if len(text) == 0:
text = '0 m'
else:
text = text.strip() + ' m'
print(text)
return text
出力は次のようになります (「1」+ Enter キーを押すと):
(PySide.QtGui.QValidator.State.Intermediate, '1', 1)
1 m
(PySide.QtGui.QValidator.State.Intermediate, '1', 1)