Класс времени QTime


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

Для работы со временем библиотека Qt предоставляет класс QTime. Как и в случае с объектами даты, с объектами времени можно проводить операции сравнения ==, !=, <, <=, > или >=. Объекты времени способны хранить время с точностью до миллисекунд. В конструктор класса QTime передаются четыре параметра. Первый параметр задает часы, второй — минуты, третий — секунды, а четвертый — миллисекунды. Третий и четвертый параметры можно опустить, по умолчанию они равны нулю. Например:


QTime time(20, 4);

Эти значения можно устанавливать и после создания объекта времени с помощью метода setHMS(). Например:


QTime time; 
time.setHMS (20, 4, 23, 3);

Для получения значений часов, минут, секунд и миллисекунд, установленных в объекте времени, в классе QTime определены следующие методы:

hour() — возвращает положительные значения часа в диапазоне от 0 до 23;

minute() — возвращает целое значение, обозначающее минуты, в диапазоне от 0 до 59;

second() — возвращает целое значение, обозначающее секунды, в диапазоне от 0 до 59;

msec() — возвращает целое значение в диапазоне от 0 до 999, представляющее собой миллисекунды.

Класс QTime предоставляет метод toString() для передачи данных объекта времени в виде строки. В этот метод, в качестве параметра, можно передать одно из форматов времени или задать свой собственный. Например:


QTime time(20, 4, 23, 3);
QString str;
str = time.toString("hh:mm:ss.zzz"); //str = "20:04:23.003"
str = time.toString("h:m:s ap"); //str = "8:4:23 pm"

При помощи статического метода fromString() можно произвести преобразование из строкового типа в тип QTime. Для этого, в первом параметре метода нужно передать одно из значений форматов.

Получить измененный объект времени можно, добавив или отняв значения секунд (или миллисекунд) от существующего объекта. Эти значения передаются в методы addSecs() и addMSecs(). Для получения текущего времени в классе QTime содержится статический метод currentTime ().

При помощи метода start() можно начать отсчет времени, а для того чтобы узнать сколько времени прошло с момента начала отсчета, следует вызвать метод elapsed(). Например, на базе этих методов можно сделать небольшой профайлер.

Следующий пример вычисляет время работы функции test():


QTime time;
time.start () ;
test();
qDebug() << "Время работы функции test() равно "
         << time.elapsed()
         << "миллисекунд"
         << endl;

Недостаток класса QTime состоит в ограничении 24-часовым интервалом, по истечении которого отсчет будет производиться с нуля. Для решения этой проблемы можно воспользоваться классом QDateTime.

Объекты класса QDateTime содержат в себе дату и время. Вызовом метода date() можно получить объект даты QDate, а вызов time() возвращает объект времени QTime. Этот класс также содержит методы toString() для представления данных в виде строки.

Читать далее: Таймер в Qt