Задать вопрос
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 мешает осознание, что придется реализовывать виджет с нуля вообще, что означает не только форматироование и валидацию, но и заботу о кординированной работе виджетов ввода и календаря: ресайз, позицирование, показ/сокрытие календаря и пр.


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

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

Похожие вопросы
ИНКОР Москва
от 100 000 до 200 000 ₽
Сбер Санкт-Петербург
До 100 000 ₽
Сбер Санкт-Петербург
До 420 000 ₽