Два варианта есть, для простого случая можно взять InputMask.
Для сложных случаев используйте textChanged, когда пользователь будет изменяет текст, вы по этому событию вы берете текст из lineEdit, парсите его и подставляете все нужные символы, после этого заменяете новой строкой старый текст.