Qt LineEdit setInputMask() with setText() and QRegExp



我有一个mm/dd/yyyy格式的日期QLineEdit。由于要求,我使用键盘获得输入,而不是使用QDateEdit。当lineEdit出现时,它必须向用户显示当前日期。我需要以下内容lineEdit.

  1. 我需要始终显示两个斜杠,并且在输入或删除时光标必须跳过。
  2. 我不应该允许用户输入无效的日期,即在输入自己时,lineEdit不应该得到无效的数字。
  3. lineEdit出现时,我必须将当前日期设置为默认文本。

对于第一点,我尝试使用setInputMask("99/99/9999")但是我无法使用setText()设置当前日期。以及如何使用QRegExp不允许lineEdit在使用setInputMask()时获得无效号码?

QDateEdit将满足您的目的。

  1. 使用 setDisplayFormat("dd/MM/yyyy") .

  2. QDateEdit不允许无效日期

  3. 您可以使用从以下位置获得QDateEdit::setDate() QDateTime::currentDateTime()

要将文本设置为带有setInputMask("99/99/9999")QLineEdit,您应该根据掩码设置文本格式:

lineEdit.setText("{:02d}/{:02d}/{:04d}".format(m, d, y))

或者,您可以暂时禁用输入掩码,在不/的情况下格式化日期,设置它并重新启用输入掩码。但请确保每个部分中的符号数量正确。

lineEdit.setInputMask("")
lineEdit.setText(date_str.replace("/", ""))
lineEdit.setInputMask("99/99/9999")

最新更新