Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: UVV от Ноябрь 14, 2007, 07:32



Название: QDateEdit без даты
Отправлено: UVV от Ноябрь 14, 2007, 07:32
Вот здесь была тема про это http://prog.org.ru/forum/index.php/topic,960.0.html
Можно поподробнее, что значит отнаследоваться?
Или может быть появились другие решения?


Название: Re: QDateEdit без даты
Отправлено: Kainit от Ноябрь 14, 2007, 10:01
Цитировать
Можно поподробнее, что значит отнаследоваться?
Боюсь вам скажут что думают о ваших способностях к программированию... Да и про наследование лучше почитать книжку.

Цитировать
Вот здесь была тема про это http://prog.org.ru/forum/index.php/topic,960.0.html
В Qt 4.3.2 нет метода fix (и скорее всего это фантазии Sergeich-а)

есть 2 других интересных метода
Код:
QValidator::State QAbstractSpinBox::validate ( QString & input, int & pos )
который как раз можно и переопределить, чтобы он возвращал всегда QValidator::Acceptable
или же можно покопаться в
Код:
void QAbstractSpinBox::fixup ( QString & input ) const

Но скажу честное ИМХО, если бы я увидел программу в которой в QDateEdit стояли бы 0000:00:00 или ещё веселее - пустая строка, я бы эту программу выкинул бы без раздумий. Совершенно непонятно зачем создавать компонент с таким странным поведением?


Название: Re: QDateEdit без даты
Отправлено: Tonal от Ноябрь 14, 2007, 11:25
Но скажу честное ИМХО, если бы я увидел программу в которой в QDateEdit стояли бы 0000:00:00 или ещё веселее - пустая строка, я бы эту программу выкинул бы без раздумий. Совершенно непонятно зачем создавать компонент с таким странным поведением?
Зачем такое поведение как раз понятно: нужно же что-то отображать, когда данных нет.
Другое дело, что отображать при этом 0000:00:00 - маразм.

Частично можно выкрутиться использовав свойства specialValueText и minimumDate, тогда, при установке даты в минимум будет отображаться строка из specialValueText.

Но это тоже не удобно, т.к.
1) Установить виджет в это состояние в ручную можно только введя минимальную дату, а не вводом specialValueText. Что требует её знания и вводит юзера в ступор.
2) Если в виджете отображается specialValueText, то следующее значение - на день больше. Что тоже не соответствует ожиданиям пользователя, особенно если QDateEdit в режиме calendarPopup. Да и не удобно это...

Решение проблемы 2, я как-то постил сюда в виде python-овского кода.
Для решения 1, можно воткнуть спец.кнопку, например.

Мы вышли из положения заменив QDateEdit полностью своим виджетом, т.к. там ещё и неудобная модель ввода (например нельзя выделить всю дату).
Но это решение, конечно, не очень Code Less...


Название: Re: QDateEdit без даты
Отправлено: Kainit от Ноябрь 14, 2007, 11:36
Честно говоря, есть 1 нормальный способ
взять
QAbstractSpinBox.
Отнаследоваться и снабдить нужной функциональностью.


Название: Re: QDateEdit без даты
Отправлено: Tonal от Ноябрь 14, 2007, 11:43
Практически всё равно от кого плясать, от QAbstractSpinBox или QLineEdit.
В любом случае QDateEdit пока можно использовать только как временный заполнитель места. :-(
Может в 4.4 это поменяется...