Création de graphiques en chandeliers

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

Capture d'écran montrant un exemple de graphique en chandelier

Pour afficher un graphique en chandelier, nous commençons par créer QCandlestickSeries pour gérer les données quotidiennes. Nous spécifions également des couleurs de corps croissantes et décroissantes personnalisées.

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 les données non continues sont conservées. La classe CandlestickDataReader est une classe auxiliaire qui permet de lire le fichier texte et de trouver les valeurs d'ouverture, de sommet, de creux, de clôture et d'horodatage à partir des données. Le site CandlestickDataReader est expliqué plus en détail par la suite. La méthode readCandlestickSet() lit les valeurs et les affecte à l'élément QCandlestickSet qu'elle renvoie à l'appelant. L'élément QCandlestickSet renvoyé est ajouté à la série. Nous sauvegardons également la liste des 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 QChart est créée et l'objet série précédemment créé y est ajouté. Nous définissons également un titre et une animation ( 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 des catégories personnalisées précédemment enregistrée. Nous définissons également la plage de l'axe vertical en interrogeant le pointeur de l'axe à partir du graphique, puis en définissant les valeurs min et max pour 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 définissons la légende pour qu'elle soit visible et nous la plaçons en 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é.

La méthode readCandlestickSet() est expliquée en détail ici. 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ée par des espaces. Sur cet extrait, la ligne est divisée en chaînes de nombres uniques qui sont stockées dans un fichier QStringList.

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

Le code suivant est utilisé pour sélectionner des valeurs dans les données continues. Les valeurs d'un site strList sont stockées dans l'ordre suivant : timestamp, open, high, low, close.

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 suivant montre comment créer un nouveau site 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.