Auf dieser Seite

Liniendiagramme mit Datums- und Zeitachsen

Hinweis: Dies ist Teil des Beispiels „Diagramme mit Widgets – Galerie “.

Screenshot, der ein Liniendiagramm mit einer statistischen Darstellung über einen Zeitraum von 21 Jahren von Januar 1991 bis Juli 2012 zeigt

Ausführen des Beispiels

Sie können das Beispiel wie folgt 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.