Я пытаюсь использовать QValidator
потомков (на самом деле в PyQt5, но это не имеет значения), чтобы проверить ряд строковых изменений.
Небольшая выдержка:
class IPv4(QWidget):
def __init__(self):
super(IPv4, self).__init__()
uic.loadUi('ipv4.ui', self)
self.address.inputMask = ''
rx = QRegularExpression(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}')
self.address.setValidator(QRegularExpressionValidator(rx, self.address))
self.netmask.setValidator(QRegularExpressionValidator(rx, self.netmask))
self.gateway.setValidator(QRegularExpressionValidator(rx, self.gateway))
self.broadcast.setValidator(QRegularExpressionValidator(rx, self.broadcast))
self.dns1.setValidator(QRegularExpressionValidator(rx, self.dns1))
self.dns2.setValidator(QRegularExpressionValidator(rx, self.dns2))
self.on_dhcp_clicked(self.dhcp.isChecked())
Это работает так, как рекламируется, но пользователь не получает обратной связи, так как попытка ввести "неправильные" символы просто отбрасывает их.
Я не нашел способа дать отзыв, кроме перехвата QLineEdit.textChanged
сигнализировать и выполнять проверку «вручную» (то есть: без установки валидатора, в противном случае ошибка text
не изменится и сигнал не будет издан). Предпочтительной обратной связью будет изменение цвета границы редактирования строки.
Это как-то противоречит цели самого валидатора. Кажется, я что-то упустил, так как не вижу, как вызвать обратную связь от QValidator
.
Что такое "стандартный способ" справиться с этим?