Liniendiagramme mit Datums- und Zeitachsen
Hinweis: Dies ist Teil des Beispiels „Diagramme mit Widgets – Galerie “.

Ausführen des Beispiels
Sie können das Beispiel wie folgt ausführen:
- Qt Creator
Öffnen Sie den Modus „ Welcome “ und wählen Sie das Beispiel unter „ Examples “ aus. Weitere Informationen finden Sie unter „Qt Creator “: Tutorial: Erstellen und Ausführen.
- Qt Extension for Visual Studio Code
Führen Sie den Befehl „ Qt: Open Qt examples “ über „ Command Palette “ aus und wählen Sie das Beispiel aus der Liste aus. Weitere Informationen finden Sie unter Qt Extension for Visual Studio Code: Tutorial: Erstellen und Ausführen.
Erstellen von Liniendiagrammen
Um ein Liniendiagramm zu erstellen, wird eine QLineSeries-Instanz benötigt. Erstellen wir eine.
auto series = new QLineSeries;In den Diagrammen werden wir darstellen, wie sich die Anzahl der Sonnenflecken im Laufe der Zeit verändert. Die Daten (vom Space Weather Prediction Center) werden aus einer Textdatei eingelesen.
Beachten Sie im folgenden Codeausschnitt, wie die Methode ` QDateTime::toMSecsSinceEpoch ` verwendet wird, um das ` QDateTime `-Objekt in eine Zahl umzuwandeln, die an die `append`-Methode von `QLineSeries` übergeben werden kann.
// data from http://www.swpc.noaa.gov/ftpdir/weekly/RecentIndices.txt
// http://www.swpc.noaa.gov/ftpdir/weekly/README
// http://www.weather.gov/disclaimer
QFile sunSpots(":sun_spots");
if (!sunSpots.open(QIODevice::ReadOnly | QIODevice::Text)) {
m_loadError = QStringLiteral("Failed to load '%1' file.").arg(sunSpots.fileName());
return false;
}
QTextStream stream(&sunSpots);
while (!stream.atEnd()) {
QString line = stream.readLine();
if (line.startsWith("#") || line.startsWith(":"))
continue;
QStringList values = line.split(QLatin1Char(' '), Qt::SkipEmptyParts);
QDateTime momentInTime;
momentInTime.setDate(QDate(values[0].toInt(), values[1].toInt() , 15));
series->append(momentInTime.toMSecsSinceEpoch(), values[2].toDouble());
}
sunSpots.close();Um die Daten im Diagramm darzustellen, benötigen wir die QChart-Instanz. Wir fügen ihr die Reihe hinzu, blenden die Legende aus, erstellen die Standardachsen und legen den Titel des Diagramms fest.
auto chart = new QChart;
chart->addSeries(series);
chart->legend()->hide();
chart->setTitle("Sunspots count (by Space Weather Prediction Center)");Da wir `QLineSeries` verwenden, werden durch den Aufruf von `createDefaultAxes` sowohl die X- als auch die Y-Achse als `QValueAxis` erstellt. Um `QDateTimeAxis` zu verwenden, müssen wir diese manuell im Diagramm festlegen. Zunächst wird die Instanz von `QDateTimeAxis` erstellt, anschließend wird die Anzahl der anzuzeigenden Markierungen festgelegt. Die Anzahl der Sonnenflecken wird als Monatsdurchschnitt angegeben. Daher benötigen wir keine Achsenbeschriftungen, die Informationen zu Uhrzeit und Tag enthalten. Dies wird durch die Festlegung eines benutzerdefinierten Beschriftungsformats erreicht. Informationen zu den verfügbaren Formatoptionen finden Sie in der Dokumentation zur Methode ` QDateTime::toString()`.
auto axisX = new QDateTimeAxis;
axisX->setTickCount(10);
axisX->setFormat("MMM yyyy");
axisX->setTitleText("Date");
chart->addAxis(axisX, Qt::AlignBottom);
series->attachAxis(axisX);
auto axisY = new QValueAxis;
axisY->setLabelFormat("%i");
axisY->setTitleText("Sunspots count");
chart->addAxis(axisY, Qt::AlignLeft);
series->attachAxis(axisY);Anschließend erstellen wir ein `QChartView`-Objekt mit `QChart` als Parameter. Auf diese Weise müssen wir die ` QGraphicsView `-Szene nicht selbst erstellen. Außerdem aktivieren wir das Antialiasing, damit die gerenderten Linien ansprechender aussehen.
createDefaultChartView(chart);Das Diagramm ist nun bereit zur Anzeige.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.