我創建了一個QLineEdit並附加了一個自定義的QValidator。我試圖給我的QValidator添加一個fixup()
函數。當我在QLineEdit中輸入一些文本時,它會調用validate()
,然後它會調用fixup()
,最後再次調用validate()
,但仍然與修復前的文本類似。我做錯了什麼?爲什麼QLineEdit沒有通過修正更新?QValidator.fixup()如何在PySide中工作?
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」 +回車):
(PySide.QtGui.QValidator.State.Intermediate, '1', 1)
1 m
(PySide.QtGui.QValidator.State.Intermediate, '1', 1)
看看'void QValidator :: fixup(QString&input)const'。 'input'是一個引用,'QString'是可變的。所以你應該在'fixup'中改變'text',而不是給它分配一個新的字符串。 – nymk
在PySide中,QString是python字符串,函數參數是不可變的。 –