====== QTime ======
Zur Darstellung und Verarbeitung von Uhrzeiten wird ''QTime'' verwendet. Die aktuelle Uhrzeit kann mit der statischen Methode ''QTime::currentTime()'' abgefragt werden. Über die ebenfalls statische Methode ''QTime::isValid()'' kann die Gültigkeit einer Uhrzeit geprüft werden:
QTime::isValid(12, 1, 2, 3);  // true
QTime::isValid(25, 4, 5, 6);  // false
 
===== Konvertierung zwischen QString und QTime =====
''QTime''-Objekte können sehr einfach in Text konvertiert umgewandelt werden - und umgekehrt. Dazu dient die Methode ''QTime::toString()'' bzw. die statische Methode ''QTime::fromString()''. Letztere bietet uns verschiedene Optionen, deshalb sehen wir sie uns genauer an:
QTime QTime::fromString (const QString& string, const QString& format)
**string**: String, der die Uhrzeit enthält \\ 
**format**: Format der Uhrzeit im String \\ 
Für die Formatangabe werden folgende Buchstaben verwendet:
^ Format ^ Bedeutung                                                     ^ zutreffende Beispiele  ^
| h      | Stundenzahl ohne führende 0                                   | 3; 14                  |
| hh     | Stundenzahl mit führender 0                                   | 03; 14                 |
| m      | Minutenzahl ohne führende 0                                   | 5; 25                  |
| mm     | Minutenzahl mit führender 0                                   | 05; 25                 |
| s      | Sekundenzahl ohne führende 0                                  | 7; 36                  |
| ss     | Sekundenzahl mit führender 0                                  | 07; 36                 |
| z      | Millisekunden ohne führende 0                                 | 8; 123                 |
| zzz    | Millisekunden mit führender 0                                 | 008; 123               |
| AP     | 12 Stunden-Format; AP muss entweder "AM" oder "PM" sein.      | AM; PM                 |
| ap     | 12 Stunden-Format; AP muss entweder "am" oder "pm" sein.      | am; pm                 |
Dazu noch ein Code-Beispiel:
QTime t = QTime::currentTime();
QString text = "13:37:42";
std::cout << "Es ist " << t.toString().toStdString() << " Uhr." << std::endl;
t = QTime::fromString(text, "hh:mm:ss");
std::cout << t.toString().toStdString() << std::endl;
Ausgabe:
  Es ist 15:02:22 Uhr.
  13:37:42
===== Zeitmessung mit QTime =====
''QTime'' kann auch zur Zeitmessung eingesetzt werden. Dafür werden die Methoden ''QTime::start()'', ''QTime::restart()'' und ''QTime::elapsed()'' verwendet. ''QTime::start()'' startet den Timer mit der aktuellen Uhrzeit. ''QTime::restart()'' macht genau das selbe, aber gibt zusätzlich die seit dem letzten Start verstrichene Zeit in Millisekunden zurück. ''QTime::elapsed()'' gibt nur die Zeit zurück und lässt den Timer unverändert weiterlaufen.\\ 
Wir können diese Methoden für einen einfachen Benchmark verwenden (Selectionsort vs. Insertionsort; die Algorithmen spielen in diesem Zusammenhang aber keine Rolle):
#include 
#include 
#include 
// Anzahl der Elemente im Array
const int num = 10000;
// Prototypen für Algorithmen
void selectionSort (int *vec, int n);
void insertionSort (int *vec, int n);
int main()
{
  int array[num],     // Array mit Zufallszahlen; wird nicht verändert
      buffer,         // Puffer-Element für Insertionsort
      copy[num];      // Kopie des Arrays mit Zufallszahlen
  QTime t = QTime::currentTime();  // aktuelle Zeit abfragen
  qsrand(t.msec());   // Zufallsgenerator initialisieren
  // Array mit Zufallszahlen füllen
  for (int i = 0; i < num; i++)
    array[i] = qrand();
  memcpy(copy, array, num * sizeof(int));  // Zufallszahlen kopieren
  t.start();                               // Timer starten
  selectionSort(copy, num);                // Array mit Selectionsort sortieren
  std::cout << "Selectionsort: " << t.elapsed() << std::endl;  // vergangene Zeit ausgeben
  memcpy(copy, array, num * sizeof(int));  // Zufallszahlen kopieren
  t.start();                               // Timer starten
  insertionSort(copy - 1, num);            // Array mit Insertionsort sortieren
  std::cout << "Insertionsort: " << t.elapsed() << std::endl;  // vergangene Zeit ausgeben
  return 0;
}
void selectionSort (int *vec, int n)
{
  int i, j, help, min;
  for (i = 0; i < n - 1; i++)
  {
    min = i;
    for (j = i + 1; j < n; j++)
      if (vec[j] < vec[min])
        min = j;
    if (min != i)
    {
      help = vec[i];
      vec[i] = vec[min];
      vec[min] = help;
    }
  }
}
void insertionSort (int *vec, int n)
{
  int i, j;
  for (i = 2; i <= n; i++)
  {
    j = i;
    vec[0] = vec[i];
    while (vec[0] < vec[j - 1])
    {
      vec[j] = vec[j - 1];
      j--;
    }
    vec[j] = vec[0];
  }
}