QDateTimeEdit - разделы часов/минут сбрасываются до пустых, когда фокус теряется

У меня есть QDateTimeField с маской, установленной как HH:mm. Рассмотрим сценарий, в котором пользователь удаляет (например) часовой раздел следующим образом:

введите здесь описание изображения

Если пользователь очистит раздел часов и затем нажмет клавишу ввода, раздел часов сбрасывается до 00 (что является ожидаемым поведением, всегда).

введите здесь описание изображения

Если пользователь очищает часовой раздел и просто щелкает в другом месте (когда QDateTimeField теряет фокус), часовой раздел остается пустым, что является моей проблемой.

введите здесь описание изображения

Может ли кто-нибудь подсказать мне способ решения этой проблемы?


person warunanc    schedule 04.08.2016    source источник


Ответы (2)


Функция interpretText() делает свое дело. Вы должны вызвать interpretText() из QDateTimeEditor в функции setModelData (в вашем классе делегата) перед доступом к его тексту.

Согласно документации

Эта функция интерпретирует текст счетчика. Если значение изменилось с момента последней интерпретации, он будет излучать сигналы.

Пример:

void SpinBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
                                   const QModelIndex &index) const
{
    QDateTimeEdit *dateTime = static_cast<QDateTimeEdit*>(editor);
    dateTime->interpretText();
    model->setData(index, dateTime->text(), Qt::EditRole);
}
person warunanc    schedule 04.08.2016

Мое предложение состоит в том, чтобы создать действие, которое подключается к сигналу timeChanged и вручную устанавливает время в правильном формате.

person Nguyen Kien    schedule 04.08.2016
comment
Проверьте мой ответ, чтобы узнать, как лучше решить эту проблему. - person warunanc; 04.08.2016