Liniendiagramme mit Datums- und Zeitachsen

Hinweis: Dies ist ein Teil des Beispiels für die Galerie Diagramme mit Widgets.

Ausführen des Beispiels

Zum Ausführen des Beispiels von Qt Creatorzu starten, öffnen Sie den Modus Welcome und wählen Sie das Beispiel unter Examples aus. Weitere Informationen finden Sie unter Erstellen und Ausführen eines Beispiels.

Erstellen von Liniendiagrammen

Um ein Liniendiagramm zu erstellen, wird die Instanz QLineSeries benötigt. Lassen Sie uns eines erstellen.

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 gelesen.

Im folgenden Ausschnitt sehen Sie, wie die Methode QDateTime::toMSecsSinceEpoch verwendet wird, um das Objekt QDateTime in eine Zahl zu konvertieren, die an die Methode QLineSeries append ü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 Instanz QChart. Wir fügen ihr die Serien 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, wird der Aufruf von createDefaultAxes QValueAxis sowohl als X- als auch als Y-Achse erstellt. Um QDateTimeAxis zu verwenden, müssen wir es manuell in das Diagramm einfügen. Zuerst wird die Instanz von QDateTimeAxis erstellt, dann wird die Anzahl der anzuzeigenden Ticks festgelegt. Die Anzahl der Sonnenflecken wird als Durchschnittswert für den Monat angegeben. Daher brauchen wir die Achsenbeschriftungen nicht mit den Informationen über die Uhrzeit und den Tag zu versehen. Dies wird durch die Einstellung eines benutzerdefinierten Etikettenformats erreicht. Bitte lesen Sie die Dokumentation der Methode QDateTime::toString(), um mehr über die verfügbaren Formatoptionen zu erfahren.

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);

Dann erstellen wir ein Objekt QChartView mit QChart als Parameter. Auf diese Weise müssen wir die Szene QGraphicsView nicht selbst erstellen. Außerdem schalten wir das Antialiasing ein, damit die gerenderten Linien besser aussehen.

createDefaultChartView(chart);

Das Diagramm ist nun bereit für die Anzeige.

© 2025 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.