2016-06-13 7 views
1

Я использую QT5.51. Почему t1 недействителен ?:QTime добавить секунды к новому объекту

QTime t1 = QTime().addSecs(122); 
qDebug() << t1.isValid() << t1.toString("hh:mm:ss"); 

Я ожидал получить «00:02:02», но я ошибаюсь ».

+0

Я должен отметить, что я в последнее время изменилась с qt4 к qt5. Я посмотрел на «Изменения API C++» и обнаружил, что «Добавление дней к нулевому QDate или секунды до нулевого QTime больше не вернет действительный QDate/QTime». Возможно, причина. http://doc.qt.io/qt-5/sourcebreaks.html –

ответ

3

Новый объект, созданный по умолчанию 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

Возвращает нулевое время, если на этот раз является недействительным.

+0

Итак, я изменился на QTime t1 (0, 0, 0, 0); t1.addSecs (122) ... Он получает «true», но ничего не добавляет, почему? Если я назначу t1.addSecs (122) новому недопустимому объекту QTime «t2», он будет работать. –

+1

, потому что 'addSeconds' не добавляет к текущему объекту, но возвращает новый с добавленными секундами –

3

Я думаю, что я получил это:

QTime t1(0,0,0,0); 
t1 = t1.addSecs(122); 
qDebug() << t1.isValid() << t1.toString("hh:mm:ss"); 

= true "00:02:02"