Qt - odmierzanie czasu czyli klasa QTime

Stronę tą wyświetlono już: 27 razy

Do przechowywania czasu w formacie upływu milisekund, sekund, minut i godzin w bibliotece Qt służy klasa QTime. Klasa ta jest dostępna po załączeniu pliku nagłówkowego QTime.

Metody statyczne

Klasa QTime posiada kilka metod statycznych. Wśród nich jest metoda currentTime, której celem jest zwrócenie obiektu klasy QTime zawierającego bieżący czas.

Listing 1
  1. qDebug() << QTime::CurrentTime();

Przykładowy wynik działania powyższego kodu:

QTime("18:00:00.000")

Kolejna metoda statyczna fromMSecsSinceStartOfDay umożliwia ustawienie czasu za pomocą liczby określającej upływ czasu w milisekundach zaczynając od godziny 00:00:00.000. Oto przykład:

Listing 2
  1. qDebug() << QTime::fromMSecsSinceStartOfDay(12345678);

Powyższy kod wyświetli:

QTime("03:25:45.678")

Wartą poświęcenia uwagi jest również metoda statyczna fromString, która umożliwia zamianę czasu na obiekt QTime. Oto kilka przykładów użycia tej metody:

Listing 3
  1. qDebug() << QTime::fromString("15:33:24", "hh:mm:ss");
  2. qDebug() << QTime::fromString("1:3:4", "h:m:s");
  3. qDebug() << QTime::fromString("1:2:3.456", "h:m:s.zzz");

Wynik działania powyższego kodu:

QTime("15:33:24.000")
QTime("01:03:04.000")
QTime("01:02:03.456")

Konstruktory

Domyślny konstruktor nie ustawia żadnej wartości czasu, natomiast dużo ciekawszy konstruktor umożliwia ustawienie czasu w następujący sposób:

Listing 4
  1. QTime time(2, 10, 40, 53); // kolejne wartości argumentów to: godziny, minuty, sekundy i milisekundy

Metody związane z odmierzaniem czasu

Jeżeli potrzebujesz odmierzać czas, jaki upłyną to metody start, restart i elapsed są do tego celu stworzone.

Metoda start ustawia bieżący czas, natomiast metoda restart zwraca upływ czasu w milisekundach i ustawia (resetuje) czas na bieżącą godzinę. Metoda elapsed zwraca upływ czasu bez resetowania wartości przechowywanej w obiekcie klasy QTime.

Listing 5
  1. QTime time;
  2. time.start(); // rozpoczęcie odliczania
  3. qDebug() << time; // wyświetlenie początkowego czasu
  4. for(quint64 i = 0; i < 1000u; i++){
  5. qDebug() << QTime::fromMSecsSinceStartOfDay(time.elapsed()); // wyświetlenie czasu, jaki upłynął
  6. }
  7. qDebug() << "Finly:"<< QTime::fromMSecsSinceStartOfDay(time.restart()); // wyświetlenie końcowego czasu

Przykładowy wycinek wyniku wyświetlonego przez powyższy kod:

...
QTime("00:00:01.638")
QTime("00:00:01.638")
QTime("00:00:01.638")
QTime("00:00:01.654")
QTime("00:00:01.654")
QTime("00:00:01.654")
QTime("00:00:01.654")
QTime("00:00:01.654")
QTime("00:00:01.654")
QTime("00:00:01.654")
Finly: QTime("00:00:01.654")

Metody pobierające i dodające wartości do składowych czasu zawartego w obiekcie klasy QTime

Pobieranie wartości poszczególnych składowych czasu umożliwiają metody:

  • hour - zwraca godziny;
  • minute - zwraca minuty;
  • second - zwraca sekundy;
  • msec - zwraca milisekundy

Możliwe jest też uzyskanie liczby milisekund, jakie upłynęły od początku dnia za pomocą metody msecsSinceStartOfDay lub uzyskanie liczby milisekund, jakie dzieli bieżący czas obiektu klasy QTime od innego obiektu tej samej klasy za pomocą metody msecsTo.

Istnieją też dwie metody umożliwiające dodanie do bieżącego czasu obiektu sekund lub milisekund:

  • addMSec;
  • addSec
Strony powiązane
strony powiązane
  1. doc.qt.io/qt-5/qtime.html - opis klasy QTime w dokumentacji Qt

Komentarze