Я использую QT5.51. Почему t1 недействителен ?:QTime добавить секунды к новому объекту
QTime t1 = QTime().addSecs(122);
qDebug() << t1.isValid() << t1.toString("hh:mm:ss");
Я ожидал получить «00:02:02», но я ошибаюсь ».
Я использую QT5.51. Почему t1 недействителен ?:QTime добавить секунды к новому объекту
QTime t1 = QTime().addSecs(122);
qDebug() << t1.isValid() << t1.toString("hh:mm:ss");
Я ожидал получить «00:02:02», но я ошибаюсь ».
Новый объект, созданный по умолчанию QTime
, запускается в недопустимом состоянии. Добавление секунд к недопустимому времени оставляет его недействительным - в конце концов, это недопустимый момент времени, а не полночь, как вы, кажется, ожидаете. Это в значительной степени поведение типа NaN.
http://doc.qt.io/qt-5/qtime.html#QTime
конструктов пустой объект времени. Нулевым временем может быть объект
QTime(0, 0, 0, 0)
(то есть, полночь), за исключением того, чтоisNull()
возвращаетtrue
иisValid()
возвращаетfalse
.
http://doc.qt.io/qt-5/qtime.html#addSecs
Возвращает нулевое время, если на этот раз является недействительным.
Итак, я изменился на QTime t1 (0, 0, 0, 0); t1.addSecs (122) ... Он получает «true», но ничего не добавляет, почему? Если я назначу t1.addSecs (122) новому недопустимому объекту QTime «t2», он будет работать. –
, потому что 'addSeconds' не добавляет к текущему объекту, но возвращает новый с добавленными секундами –
Я думаю, что я получил это:
QTime t1(0,0,0,0);
t1 = t1.addSecs(122);
qDebug() << t1.isValid() << t1.toString("hh:mm:ss");
= true "00:02:02"
Я должен отметить, что я в последнее время изменилась с qt4 к qt5. Я посмотрел на «Изменения API C++» и обнаружил, что «Добавление дней к нулевому QDate или секунды до нулевого QTime больше не вернет действительный QDate/QTime». Возможно, причина. http://doc.qt.io/qt-5/sourcebreaks.html –