Kupyc
@Kupyc

PyQt&PySide: null-значение в QDateTimeEdit?

Мои приветствия.


В Qt (а стало быть и в обвязках PyQt&PySide) есть такая хорошая вещь как QtGui.QDateTimeEdit, позволяющая вводить дату и выбирать ее с помощью выпадающего календарика. Виджет мощный, но не без изъяна: нет возможности обрабатывать null-значения. Таким образом виджет нельзя использовать в формах где дата является полем необязательным — необходимо или признавать некую ненулевую дату (например, 01.01.1999 00:00) датой при вводе которой поле считается неозначенным, или не использовать этот виджет.


Видится два решения: хакать виджет, используя какие-либо лазейки вроде установки текстового значения поля напрямую, минуя валидаторы или писать свой виджет, повторяя функционал имеющегося с точностью приемлемой в проекте.


С хаком не помогли следующие способы:
  • widget.lineEdit().setText("")
  • widget.setSpecialValueText(«необязательное поле»)
  • widget.clear()


В варианте с наследованием от QComboBox лично мне неясно как прикрутить календарь в выпадающий popup куда отлично прикручиваются различные представления вроде деревьев и пр.


Наследоваться от QLineEdit мешает осознание, что придется реализовывать виджет с нуля вообще, что означает не только форматироование и валидацию, но и заботу о кординированной работе виджетов ввода и календаря: ресайз, позицирование, показ/сокрытие календаря и пр.


Вопрос: как хабросообщество решило это проблему?
  • Вопрос задан
  • 3239 просмотров
Решения вопроса 1
proDOOMman
@proDOOMman
Сталкивался с такой же проблемой. В итоге пришлось писать собственный виждет, состоящий из QLineEdit и QToolButton. На кнопку повешен вызов QMenu с QWidgetAction, в котором живет QCalendarWidget.
На cpp все это занимало 50 строк кода
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы