Modification de la couleur et de l'état des barres
Remarque : ceci fait partie de l'exemple « Galerie de graphiques avec widgets ».
Cet exemple montre comment modifier la couleur et l'état des barres à l'aide de la méthode setBarSelected().

Nous créons les ensembles et les remplissons avec les données. Ensuite, nous créons une série et y ajoutons des données.
QBarSet *setChicken = createChickenSet();
QBarSet *setPork = createPorkSet();
QBarSet *setTurkey = createTurkeySet();
QBarSet *setHam = createHamSet();
qreal totalSum = setChicken->sum() + setPork->sum() + setTurkey->sum() + setHam->sum();
QList<QBarSet *> setList = QList<QBarSet *>{setChicken, setPork, setTurkey, setHam};
auto series = new QBarSeries;
series->append(setList);Nous créons le graphique et y ajoutons la série. Nous ajoutons également un titre au graphique, définissons une animation pour celui-ci et alignons la légende.
auto chart = new QChart;
chart->addSeries(series);
chart->setTitle(tr("Meat Consumption (Click on bars to select them)"));
chart->setAnimationOptions(QChart::SeriesAnimations);
chart->legend()->setVisible(true);
chart->legend()->setAlignment(Qt::AlignBottom);
chart->layout()->setContentsMargins(0, 0, 0, 0);Ici, nous définissons la couleur des barres sélectionnées.
const auto barSets = series->barSets();
for (QBarSet *barSet : barSets)
barSet->setSelectedColor(barSet->brush().color().darker());L'étape suivante consiste à ajouter des axes : un axe QBarCategoryAxis pour les années de mesure et un axe QValueAxis pour la plage de valeurs.
QStringList categories = createYearCategories();
auto axisX = new QBarCategoryAxis;
axisX->setCategories(categories);
chart->addAxis(axisX, Qt::AlignBottom);
series->attachAxis(axisX);
auto axisY = new QValueAxis;
axisY->setRange(0, 20);
axisY->setTitleText(tr("Tons"));
axisY->setLabelsAngle(-90);
axisY->setTitleVisible(true);
chart->addAxis(axisY, Qt::AlignLeft);
series->attachAxis(axisY);Nous ajoutons ensuite la vue de graphique dans laquelle insérer le graphique.
auto chartView = new QChartView(chart, this);
chartView->setRenderHint(QPainter::Antialiasing);Ici, nous créons un widget pour les étiquettes des valeurs des barres sélectionnées et non sélectionnées.
auto labelWidget = new QWidget(this);
auto labelLayout = new QHBoxLayout(labelWidget);
labelLayout->setAlignment(Qt::AlignCenter);
auto totalSumLabel = new QLabel(tr("Total sum: %1 T").arg(totalSum), this);
labelLayout->addWidget(totalSumLabel);
totalSumLabel->setContentsMargins(0, 0, 54, 0);
auto selectedSumLabel = new QLabel(tr("Selected sum: 0 T"), this);
labelLayout->addWidget(selectedSumLabel);
auto unselectedSumLabel = new QLabel(tr("Unselected sum: %1 T").arg(totalSum), this);
labelLayout->addWidget(unselectedSumLabel);
unselectedSumLabel->setContentsMargins(54, 0, 0, 0);Nous associons la sélection d’une barre spécifique aux étiquettes de valeurs à l’aide d’un lambda. La fonction ` set->toggleSelection({index}) ` définit la barre sélectionnée.
QObject::connect(series, &QAbstractBarSeries::clicked, series, [=](int index, QBarSet *set) {
set->toggleSelection({index});
qreal selectedSum = 0.;
for (int i = 0; i < setList.size(); ++i) {
auto selectedIndices = setList.at(i)->selectedBars();
for (int k = 0; k < selectedIndices.size(); ++k)
selectedSum += setList.at(i)->at(selectedIndices.at(k));
}
selectedSumLabel->setText(tr("Selected sum: %1 T").arg(selectedSum));
// Because of rounding errors, selectedSum can result in being bigger than total sum
qreal unselectedSum = totalSum - selectedSum < 0 ? 0. : totalSum - selectedSum;
unselectedSumLabel->setText(
tr("Unselected sum: %1 T")
.arg(unselectedSum)
);
});Enfin, nous créons la mise en page principale.
auto mainLayout = new QVBoxLayout(this);
mainLayout->addWidget(chartView);
mainLayout->addWidget(labelWidget);© 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.