Création de graphiques en chandeliers

Remarque : ceci fait partie de l'exemple « Charts with Widgets Gallery ».

Capture d'écran présentant un exemple de graphique en chandeliers japonais

Pour afficher un graphique en chandeliers, nous commençons par créer une instance de `QCandlestickSeries` afin de gérer les données quotidiennes. Nous spécifions également des couleurs personnalisées pour le corps des chandeliers, respectivement pour les hausses et les baisses.

auto acmeSeries = new QCandlestickSeries;
acmeSeries->setName("Acme Ltd");
acmeSeries->setIncreasingColor(QColor(Qt::green));
acmeSeries->setDecreasingColor(QColor(Qt::red));

QFile est utilisé pour accéder à un fichier texte dans lequel sont stockées les données non continues. La classe « CandlestickDataReader » est une classe auxiliaire permettant de lire le fichier texte et d’extraire des données les valeurs d’ouverture, de plus haut, de plus bas, de clôture, ainsi que l’horodatage. La classe « CandlestickDataReader » est expliquée plus en détail ci-après. La méthode readCandlestickSet() lit les valeurs et les attribue à l’objet QCandlestickSet que la méthode renvoie à l’appelant. L’objet QCandlestickSet renvoyé est ajouté à la série. Nous enregistrons également une liste de catégories personnalisées pour une utilisation ultérieure.

QFile acmeData(":candlestick");
if (!acmeData.open(QIODevice::ReadOnly | QIODevice::Text)) {
    m_loadError = QStringLiteral("Failed to load '%1' file.").arg(acmeData.fileName());
    return false;
}

QStringList categories;

CandlestickDataReader dataReader(&acmeData);
while (!dataReader.atEnd()) {
    QCandlestickSet *set = dataReader.readCandlestickSet();
    if (set) {
        acmeSeries->append(set);
        categories << QDateTime::fromMSecsSinceEpoch(set->timestamp()).toString("dd");
    }
}

Ci-dessous, une nouvelle instance de `QChart` est créée et l’objet de série créé précédemment y est ajouté. Nous définissons également un titre et configurons une animation de type « QChart::SeriesAnimation ».

auto chart = new QChart;
chart->addSeries(acmeSeries);
chart->setTitle("Acme Ltd. Historical Data (July 2015)");
chart->setAnimationOptions(QChart::SeriesAnimations);

Ici, nous demandons au graphique de créer des axes par défaut pour notre présentation. Ensuite, nous définissons des catégories personnalisées pour l’axe horizontal en interrogeant le pointeur de l’axe à partir du graphique, puis en définissant les catégories à partir de la liste de catégories personnalisées précédemment enregistrée. Nous définissons également la plage de l’axe vertical en récupérant le pointeur de cet axe auprès du graphique, puis en définissant les valeurs minimale et maximale de cet axe.

chart->createDefaultAxes();

auto axisX = qobject_cast<QBarCategoryAxis *>(chart->axes(Qt::Horizontal).at(0));
axisX->setCategories(categories);

auto axisY = qobject_cast<QValueAxis *>(chart->axes(Qt::Vertical).at(0));
axisY->setMax(axisY->max() * 1.01);
axisY->setMin(axisY->min() * 0.99);

Ci-dessous, nous rendons la légende visible et la plaçons au bas du graphique.

chart->legend()->setVisible(true);
chart->legend()->setAlignment(Qt::AlignBottom);

Enfin, nous ajoutons le graphique à une vue.

createDefaultChartView(chart);

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

Ici, la méthode ` readCandlestickSet() ` est expliquée en détail. Tout d’abord, une ligne est lue à partir du fichier, en rejetant toutes les lignes commençant par #, car elles sont considérées comme des lignes de commentaire.

QString line = m_textStream.readLine();
if (line.startsWith("#") || line.isEmpty())
    return nullptr;

Dans le fichier, les données sont organisées sous la forme d’une séquence de nombres délimités par des espaces. Dans cet extrait de code, la ligne est divisée en chaînes de caractères contenant un seul nombre, qui sont stockées dans un ` QStringList`.

QStringList strList = line.split(QLatin1Char(' '), Qt::SkipEmptyParts);
if (strList.count() != 5)
    return nullptr;

Pour extraire des valeurs à partir de ces données continues, le code suivant est utilisé. Les valeurs d’un objet ` strList ` sont stockées dans l’ordre suivant : horodatage, cours d’ouverture, plus haut, plus bas, cours de clôture.

const qreal timestamp = strList.at(0).toDouble();
const qreal open = strList.at(1).toDouble();
const qreal high = strList.at(2).toDouble();
const qreal low = strList.at(3).toDouble();
const qreal close = strList.at(4).toDouble();

Enfin, l'extrait de code suivant montre comment créer un nouvel objet `QCandlestickSet` et lui fournir toutes les valeurs nécessaires.

auto candlestickSet = new QCandlestickSet(timestamp);
candlestickSet->setOpen(open);
candlestickSet->setHigh(high);
candlestickSet->setLow(low);
candlestickSet->setClose(close);

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