Farbe und Zustand von Balken ändern
Hinweis: Dies ist Teil des Beispiels „Diagramme mit Widgets-Galerie “.
Das Beispiel zeigt, wie man die Farbe und den Status von Balken mithilfe von `setBarSelected()` ändert.

Wir erstellen die Datensätze und füllen sie mit den Daten. Anschließend erstellen wir eine Reihe und fügen ihr Daten hinzu.
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);Wir erstellen das Diagramm und fügen ihm die Reihen hinzu. Außerdem fügen wir dem Diagramm einen Titel hinzu, legen eine Animation für das Diagramm fest und richten die Legende aus.
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);Hier legen wir die Farbe für die ausgewählten Balken fest.
const auto barSets = series->barSets();
for (QBarSet *barSet : barSets)
barSet->setSelectedColor(barSet->brush().color().darker());Der nächste Schritt ist das Hinzufügen von Achsen: „QBarCategoryAxis“ für die Messjahre und „QValueAxis“ für den Wertebereich.
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);Anschließend fügen wir die Diagrammansicht hinzu, in die das Diagramm eingefügt werden soll.
auto chartView = new QChartView(chart, this);
chartView->setRenderHint(QPainter::Antialiasing);Hier erstellen wir ein Widget für die Beschriftungen der Werte ausgewählter und nicht ausgewählter Balken.
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);Wir verknüpfen die Auswahl eines bestimmten Balkens mit den Wertbeschriftungen mithilfe eines Lambda-Ausdrucks. „ set->toggleSelection({index}) “ legt den ausgewählten Balken fest.
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)
);
});Abschließend erstellen wir das Hauptlayout.
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.