Sur cette page

Création de graphiques avec des thèmes

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

Il s'agit ici de modifier l'aspect et la convivialité des différents thèmes intégrés pour certains des types de graphiques pris en charge.

Capture d'écran montrant des graphiques à thème lumineux

Capture d'écran montrant des cartes à thème sur le sable brun

Capture d'écran montrant des cartes à thème bleu céruléen

Création de graphiques

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

Un graphique est d'abord créé.

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, les 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 plus d'espace entre les étiquettes et les axes des ordonnées. Pour cela, nous spécifions un format d'étiquette qui ajoute des caractères d'espacement 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 grille.

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

Changement de 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 présentation.

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'anti-cré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 les axes 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 être accompagné d'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 voir comment le changement 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.