Qt LineEdit setInputMask() с setText() и QRegExp
У меня есть QLineEdit
для даты в формате мм / дд / гггг. Я получаю ввод с помощью клавиатуры и не использую QDateEdit
из-за требования. И когда строка редактирования подходит к просмотру, она должна показывать пользователю текущую дату. Мне нужно следующее для редактирования строки.
- Мне нужно, чтобы всегда отображались две косые черты, а курсор должен пропускать при вводе или удалении.
- Я не должен позволять пользователю вводить недопустимую дату, т.е. при вводе себя строка редактирования не должна получать недопустимые номера.
- Я должен установить текущую дату в качестве текста по умолчанию, когда появится строка редактирования.
Для первого момента я попытался использовать setInputMask("99/99/9999")
но с этим я не могу установить текущую дату, используя setText()
, И как использовать QRegExp, чтобы запретить редактированию строк получить неверный номер при использовании setInputMask()
?
2 ответа
QDateEdit will serve your purpose.
использование
setDisplayFormat("dd/MM/yyyy")
,QDateEdit
wont allow invalid datesТы можешь использовать
QDateEdit::setDate()
получен изQDateTime::currentDateTime()
Для установки текста вQLineEdit
сsetInputMask("99/99/9999")
вы должны форматировать текст в зависимости от вашей маски:
lineEdit.setText("{:02d}/{:02d}/{:04d}".format(m, d, y))
Кроме того, вы можете временно отключить InputMask, отформатировать дату без/
, установите его и снова включите InputMask. Но убедитесь, что количество символов в каждой части правильное.
lineEdit.setInputMask("")
lineEdit.setText(date_str.replace("/", ""))
lineEdit.setInputMask("99/99/9999")