Qt LineEdit setInputMask() с setText() и QRegExp

У меня есть QLineEdit для даты в формате мм / дд / гггг. Я получаю ввод с помощью клавиатуры и не использую QDateEdit из-за требования. И когда строка редактирования подходит к просмотру, она должна показывать пользователю текущую дату. Мне нужно следующее для редактирования строки.

  1. Мне нужно, чтобы всегда отображались две косые черты, а курсор должен пропускать при вводе или удалении.
  2. Я не должен позволять пользователю вводить недопустимую дату, т.е. при вводе себя строка редактирования не должна получать недопустимые номера.
  3. Я должен установить текущую дату в качестве текста по умолчанию, когда появится строка редактирования.

Для первого момента я попытался использовать setInputMask("99/99/9999") но с этим я не могу установить текущую дату, используя setText(), И как использовать QRegExp, чтобы запретить редактированию строк получить неверный номер при использовании setInputMask()?

2 ответа

QDateEdit will serve your purpose.

  1. использование setDisplayFormat("dd/MM/yyyy"),

  2. QDateEdit wont allow invalid dates

  3. Ты можешь использовать 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")
Другие вопросы по тегам