summaryrefslogtreecommitdiffstats
path: root/examples/charts/chartsgallery/pointconfigurationwidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/charts/chartsgallery/pointconfigurationwidget.cpp')
-rw-r--r--examples/charts/chartsgallery/pointconfigurationwidget.cpp160
1 files changed, 160 insertions, 0 deletions
diff --git a/examples/charts/chartsgallery/pointconfigurationwidget.cpp b/examples/charts/chartsgallery/pointconfigurationwidget.cpp
new file mode 100644
index 00000000..5c2970c3
--- /dev/null
+++ b/examples/charts/chartsgallery/pointconfigurationwidget.cpp
@@ -0,0 +1,160 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "pointconfigurationwidget.h"
+
+#include <QChart>
+#include <QChartView>
+#include <QCheckBox>
+#include <QColor>
+#include <QComboBox>
+#include <QGraphicsLayout>
+#include <QGridLayout>
+#include <QHBoxLayout>
+#include <QIcon>
+#include <QLabel>
+#include <QLineEdit>
+#include <QLineSeries>
+
+//![1]
+PointConfigurationWidget::PointConfigurationWidget(QWidget *parent)
+ : ContentWidget(parent)
+{
+//![1]
+ //![2]
+ m_series = new QLineSeries;
+ m_series->setPointsVisible(true);
+ m_series->append({QPointF(0, 7), QPointF(2, 4),
+ QPointF(3, 5), QPointF(7, 4),
+ QPointF(10, 5), QPointF(11, 1),
+ QPointF(13, 3), QPointF(17, 6),
+ QPointF(18, 3), QPointF(20, 2)});
+ //![2]
+
+ //![3]
+ auto selectedPointIndexLabel = new QLabel(tr("Selected Point: "), this);
+ m_selectedPointIndexLineEdit = new QLineEdit(this);
+ m_selectedPointIndexLineEdit->setReadOnly(true);
+
+ auto colorLabel = new QLabel(tr("Color: "), this);
+ m_colorCombobox = new QComboBox(this);
+ QStringList colorStrings = {"red", "orange", "yellow", "green", "blue",
+ "indigo", "violet", "black"};
+ QStringList trColorStrings = {tr("red"), tr("orange"), tr("yellow"),
+ tr("green"), tr("blue"), tr("indigo"),
+ tr("violet"), tr("black")};
+ for (int i = 0; i < colorStrings.size(); i++)
+ m_colorCombobox->addItem(QIcon(), trColorStrings[i], QColor(colorStrings[i]));
+
+ auto sizeLabel = new QLabel(tr("Size: "), this);
+ m_sizeCombobox = new QComboBox(this);
+ for (auto size : { 2, 3, 4, 6, 8, 10, 12, 15 })
+ m_sizeCombobox->addItem(QIcon(), QString::number(size), size);
+
+ auto labelVisibilityLabel = new QLabel(tr("Label Visibility: "), this);
+ m_labelVisibilityCheckbox = new QCheckBox(this);
+
+ auto customLabelLabel = new QLabel(tr("Custom Label: "), this);
+ m_customLabelLineEdit = new QLineEdit(this);
+ //![3]
+
+ //![4]
+ QObject::connect(m_series, &QXYSeries::clicked, m_series, [&](const QPointF &point) {
+ int index = m_series->points().indexOf(point.toPoint());
+ if (index != -1) {
+ m_series->deselectAllPoints();
+ m_series->selectPoint(index);
+ m_selectedPointIndex = index;
+ m_selectedPointConfig = m_series->pointConfiguration(index);
+ const QPointF selectedPoint(m_series->at(index));
+ m_selectedPointIndexLineEdit->setText("(" + QString::number(selectedPoint.x()) + ", " +
+ QString::number(selectedPoint.y()) + ")");
+ PointConfigurations config = m_series->pointConfiguration(index);
+
+ QVariant colorVar = config[QXYSeries::PointConfiguration::Color];
+ QColor color = colorVar.isValid() ? colorVar.value<QColor>() : m_series->color();
+ if (m_colorCombobox->findData(color) < 0)
+ m_colorCombobox->addItem(color.name(), color);
+ m_colorCombobox->setCurrentIndex(m_colorCombobox->findData(color));
+
+ QVariant sizeVar = config[QXYSeries::PointConfiguration::Size];
+ qreal size = sizeVar.isValid() ? sizeVar.toReal() : m_series->markerSize();
+ if (m_sizeCombobox->findData(size) < 0)
+ m_sizeCombobox->addItem(QString::number(size), size);
+ m_sizeCombobox->setCurrentIndex(m_sizeCombobox->findData(size));
+
+ QVariant labelVisibilityVar = config[QXYSeries::PointConfiguration::LabelVisibility];
+ bool labelVisibility = labelVisibilityVar.isValid() ? labelVisibilityVar.toBool() :
+ m_series->pointLabelsVisible();
+ m_labelVisibilityCheckbox->setChecked(labelVisibility);
+
+ QVariant customLabelVar = config[QXYSeries::PointConfiguration::LabelFormat];
+ QString customLabel = customLabelVar.isValid() ? customLabelVar.toString() : "";
+ m_customLabelLineEdit->setText(customLabel);
+ }
+ });
+ //![4]
+
+ //![5]
+ QObject::connect(m_colorCombobox, &QComboBox::activated, m_series, [&](const int) {
+ m_selectedPointConfig[QXYSeries::PointConfiguration::Color] = m_colorCombobox->currentData();
+ m_series->setPointConfiguration(m_selectedPointIndex, m_selectedPointConfig);
+ });
+ QObject::connect(m_sizeCombobox, &QComboBox::activated, m_series, [&](const int) {
+ m_selectedPointConfig[QXYSeries::PointConfiguration::Size] = m_sizeCombobox->currentData();
+ m_series->setPointConfiguration(m_selectedPointIndex, m_selectedPointConfig);
+ });
+ QObject::connect(m_labelVisibilityCheckbox, &QAbstractButton::clicked, m_series, [&](const bool checked) {
+ m_selectedPointConfig[QXYSeries::PointConfiguration::LabelVisibility] = checked;
+ m_series->setPointConfiguration(m_selectedPointIndex, m_selectedPointConfig);
+ });
+ QObject::connect(m_customLabelLineEdit, &QLineEdit::editingFinished, m_series, [&]() {
+ m_selectedPointConfig[QXYSeries::PointConfiguration::LabelFormat] = m_customLabelLineEdit->text();
+ m_series->setPointConfiguration(m_selectedPointIndex, m_selectedPointConfig);
+ });
+ //![5]
+
+ //![6]
+ auto chart = new QChart;
+ chart->addSeries(m_series);
+ chart->createDefaultAxes();
+ chart->setTitle("Select points with mouse click");
+ chart->layout()->setContentsMargins(0, 0, 0, 0);
+ chart->legend()->setVisible(false);
+
+ m_selectInitialPointConnection = QObject::connect(chart, &QChart::geometryChanged, chart, [&]() {
+ m_series->selectPoint(4);
+ m_series->clicked(m_series->at(m_series->selectedPoints()[0]));
+ disconnect(m_selectInitialPointConnection);
+ });
+
+ auto chartView = new QChartView(chart, this);
+ chartView->setRenderHint(QPainter::Antialiasing);
+
+ auto controlWidget = new QWidget(this);
+ auto controlLayout = new QGridLayout(controlWidget);
+ controlLayout->setColumnStretch(1, 1);
+
+ controlLayout->addWidget(selectedPointIndexLabel, 0, 0);
+ controlLayout->addWidget(m_selectedPointIndexLineEdit, 0, 1);
+
+ controlLayout->addWidget(colorLabel, 1, 0);
+ controlLayout->addWidget(m_colorCombobox, 1, 1);
+
+ controlLayout->addWidget(sizeLabel, 2, 0);
+ controlLayout->addWidget(m_sizeCombobox, 2, 1);
+
+ controlLayout->addWidget(labelVisibilityLabel, 3, 0);
+ controlLayout->addWidget(m_labelVisibilityCheckbox, 3, 1, 1, 2);
+
+ controlLayout->addWidget(customLabelLabel, 4, 0);
+ controlLayout->addWidget(m_customLabelLineEdit, 4, 1);
+
+ auto mainLayout = new QHBoxLayout(this);
+ mainLayout->addWidget(chartView);
+ mainLayout->setStretch(0, 1);
+ mainLayout->addWidget(controlWidget);
+ //![6]
+//![7]
+}
+//![7]