Sur cette page

Création de graphiques avec des thèmes

Remarque : ceci fait partie de l'exemple « Galerie de graphiques avec widgets ».

Vous pouvez ici modifier l'apparence des différents thèmes intégrés pour certains des types de graphiques pris en charge.

Capture d'écran présentant des graphiques au thème clair

Capture d'écran présentant des graphiques sur le thème du sable brun

Capture d'écran présentant des graphiques sur le thème du bleu céruléen

Création de graphiques

Les graphiques de différents types sont générés et ajoutés séparément à la mise en page. Par exemple, le graphique linéaire est créé comme suit. La création d’autres types de graphiques s’effectue de manière similaire.

Commencez par créer un graphique.

auto chart = new QChart;
chart->setTitle("Line Chart");

Un ensemble commun de données aléatoires est généré et placé dans une liste. Cette liste est utilisée dans chaque type de graphique pour ajouter des données aux séries du graphique. Pour les séries de lignes, des instances QLineSeries sont créées et ajoutées au graphique.

QString name("Series ");
int nameIndex = 0;
for (const DataList &list : m_dataTable) {
    auto series = new QLineSeries(chart);
    for (const Data &data : list)
        series->append(data.first);
    series->setName(name + QString::number(nameIndex));
    nameIndex++;
    chart->addSeries(series);
}

Des axes par défaut sont créés pour la série de lignes. Nous spécifions également des plages pour les axes en fonction de la plage des données utilisées pour la série.

chart->createDefaultAxes();
chart->axes(Qt::Horizontal).first()->setRange(0, m_valueMax);
chart->axes(Qt::Vertical).first()->setRange(0, m_valueCount);

Nous souhaitons également ajouter davantage d’espace entre les étiquettes et l’axe des y. Pour cela, nous spécifions un format d’étiquette qui ajoute des espaces aux étiquettes.

// Add space to label to add space between labels and axis
auto axisY = qobject_cast<QValueAxis *>(chart->axes(Qt::Vertical).first());
Q_ASSERT(axisY);
axisY->setLabelFormat("%.1f  ");

Enfin, le graphique linéaire est ajouté à la mise en page en grille.

chartView = new QChartView(createLineChart(), this);
m_ui->gridLayout->addWidget(chartView, 1, 2);

Modification du thème

L’utilisateur peut sélectionner un thème intégré à utiliser dans l’exemple. Ce thème est ensuite appliqué à tous les graphiques de la mise en page.

auto theme = static_cast<QChart::ChartTheme>(
            m_ui->themeComboBox->itemData(m_ui->themeComboBox->currentIndex()).toInt());
    ...
chartView->chart()->setTheme(theme);

Modification de l’animation, de la légende et de l’anticrénelage

Dans cet exemple, il est également possible de voir comment la modification de l’animation, de la légende et de l’anticrénelage affecte l’apparence du graphique.

En fonction de la sélection de l'utilisateur, le type d'animation utilisé est défini pour chaque graphique. Il est possible de n'avoir aucune animation dans le graphique, ou d'avoir des animations pour l'axe de la grille ou les séries, ou les deux.

QChart::AnimationOptions options(
            m_ui->animatedComboBox->itemData(m_ui->animatedComboBox->currentIndex()).toInt());
if (!m_charts.isEmpty() && m_charts.at(0)->chart()->animationOptions() != options) {
    for (QChartView *chartView : charts)
        chartView->chart()->setAnimationOptions(options);
}

Le graphique peut s’afficher avec une légende. La légende peut être alignée sur différents côtés du graphique.

Qt::Alignment alignment(
            m_ui->legendComboBox->itemData(m_ui->legendComboBox->currentIndex()).toInt());

if (!alignment) {
    for (QChartView *chartView : charts)
        chartView->chart()->legend()->hide();
} else {
    for (QChartView *chartView : charts) {
        chartView->chart()->legend()->setAlignment(alignment);
        chartView->chart()->legend()->show();
    }
}

L'utilisateur peut également observer comment la modification de l'option d'anticrénelage modifie l'apparence du graphique. L'anticrénelage est mis à jour en fonction de la sélection de l'utilisateur.

bool checked = m_ui->antialiasCheckBox->isChecked();
for (QChartView *chart : charts)
    chart->setRenderHint(QPainter::Antialiasing, checked);

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