summaryrefslogtreecommitdiffstats
path: root/examples/charts/chartsgallery/selectedbarwidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/charts/chartsgallery/selectedbarwidget.cpp')
-rw-r--r--examples/charts/chartsgallery/selectedbarwidget.cpp147
1 files changed, 147 insertions, 0 deletions
diff --git a/examples/charts/chartsgallery/selectedbarwidget.cpp b/examples/charts/chartsgallery/selectedbarwidget.cpp
new file mode 100644
index 00000000..d54d2201
--- /dev/null
+++ b/examples/charts/chartsgallery/selectedbarwidget.cpp
@@ -0,0 +1,147 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "selectedbarwidget.h"
+
+#include <QBarCategoryAxis>
+#include <QBarSeries>
+#include <QBarSet>
+#include <QChart>
+#include <QChartView>
+#include <QGraphicsLayout>
+#include <QHBoxLayout>
+#include <QLabel>
+#include <QValueAxis>
+
+SelectedBarWidget::SelectedBarWidget(QWidget *parent)
+ : ContentWidget(parent)
+{
+ //![1]
+ 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);
+ //![1]
+
+ //![2]
+ 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);
+ //![2]
+
+ //![3]
+ const auto barSets = series->barSets();
+ for (QBarSet *barSet : barSets)
+ barSet->setSelectedColor(barSet->brush().color().darker());
+ //![3]
+
+ //![4]
+ 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);
+ //![4]
+
+ //![5]
+ auto chartView = new QChartView(chart, this);
+ chartView->setRenderHint(QPainter::Antialiasing);
+ //![5]
+
+ //![6]
+ 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);
+ //![6]
+
+ //![7]
+ 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)
+ );
+ });
+ //![7]
+
+ //![8]
+ auto mainLayout = new QVBoxLayout(this);
+
+ mainLayout->addWidget(chartView);
+ mainLayout->addWidget(labelWidget);
+ //![8]
+}
+
+QBarSet *SelectedBarWidget::createChickenSet()
+{
+ auto set = new QBarSet(tr("Chicken"));
+ set->append({15.0, 12.0, 8.0, 11.5, 13.7});
+ return set;
+}
+
+QBarSet *SelectedBarWidget::createPorkSet()
+{
+ auto set = new QBarSet(tr("Pork"));
+ set->append({9.0, 11.0, 9.0, 7, 12.2});
+ return set;
+}
+
+QBarSet *SelectedBarWidget::createTurkeySet()
+{
+ auto set = new QBarSet(tr("Turkey"));
+ set->append({5.0, 7.6, 9.3, 8, 8.1});
+ return set;
+}
+
+QBarSet *SelectedBarWidget::createHamSet()
+{
+ auto set = new QBarSet(tr("Ham"));
+ set->append({5.4, 7.1, 9.3, 12.3, 11.3});
+ return set;
+}
+
+QStringList SelectedBarWidget::createYearCategories()
+{
+ return QStringList{tr("2017"),
+ tr("2018"),
+ tr("2019"),
+ tr("2020"),
+ tr("2021")};
+}