Sur cette page

Graphiques linéaires avec axes de date et d'heure

Note : Ceci fait partie de l'exemple de la galerie Charts with Widgets.

Capture d'écran montrant un graphique linéaire avec une statistique sur 21 ans, de janvier 1991 à juillet 2012.

Exécution de l'exemple

Pour exécuter l'exemple à partir de Qt Creatorouvrez le mode Welcome et sélectionnez l'exemple à partir de Examples. Pour plus d'informations, voir Qt Creator: Tutoriel : Construire et exécuter.

Création de graphiques linéaires

Pour créer un graphique linéaire, une instance QLineSeries est nécessaire. Créons-en une.

auto series = new QLineSeries;

Sur les graphiques, nous présenterons l'évolution du nombre de taches solaires dans le temps. Les données (provenant du Space Weather Prediction Center) sont lues à partir d'un fichier texte.

Dans l'extrait ci-dessous, vous remarquerez que la méthode QDateTime::toMSecsSinceEpoch est utilisée pour convertir l'objet QDateTime en un nombre qui peut être transmis à la méthode QLineSeries append.

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

Pour présenter les données sur le graphique, nous avons besoin de l'instance QChart. Nous y ajoutons les séries, masquons la légende, créons les axes par défaut et définissons le titre du graphique.

auto chart = new QChart;
chart->addSeries(series);
chart->legend()->hide();
chart->setTitle("Sunspots count (by Space Weather Prediction Center)");

Puisque nous utilisons QLineSeries, l'appel à createDefaultAxes créera QValueAxis à la fois comme axe X et Y. Pour utiliser QDateTimeAxis, nous devons le définir manuellement dans le graphique. Tout d'abord, l'instance de QDateTimeAxis est créée, puis le nombre de ticks à afficher est défini. Le nombre de taches solaires est fourni en tant que moyenne pour le mois. Par conséquent, nous n'avons pas besoin que les étiquettes des axes contiennent les informations relatives à l'heure et au jour. Pour ce faire, un format d'étiquette personnalisé est défini. Veuillez consulter la documentation de la méthode QDateTime::toString() pour en savoir plus sur les options de format disponibles.

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

Nous créons ensuite un objet QChartView avec QChart comme paramètre. Ainsi, nous n'avons pas besoin de créer la scène QGraphicsView nous-mêmes. Nous activons également l'anticrénelage pour que les lignes rendues soient plus belles.

createDefaultChartView(chart);

Le graphique est prêt à être affiché.

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