diff options
author | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2023-09-08 13:48:44 +0300 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2023-09-11 09:29:39 +0000 |
commit | e7ea91ace64c26ef6a06f5e8d71f5c9b7b6bfe26 (patch) | |
tree | 319270117dfbc0f7f74069e3f1e272ea51c17b64 | |
parent | 1636d8908feb88be7d2ed28aa7f29039d62602f7 (diff) |
Remove excessive signaling from sizeBy and colorBy
If sizeBy or colorBy changed more than one point configuration,
a signal about the change was triggered for each point. There is only
need for one signal after all points have been changed.
Fixes: QTBUG-116647
Change-Id: Iec3ca822e9de4d594ef5327adf9f83a3da3906a2
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
(cherry picked from commit ffc79d1da5f8ad6cf3dfbaf6d7eb9298182132d6)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | src/charts/xychart/qxyseries.cpp | 55 | ||||
-rw-r--r-- | src/charts/xychart/qxyseries_p.h | 6 |
2 files changed, 41 insertions, 20 deletions
diff --git a/src/charts/xychart/qxyseries.cpp b/src/charts/xychart/qxyseries.cpp index cebe08e6..05a92075 100644 --- a/src/charts/xychart/qxyseries.cpp +++ b/src/charts/xychart/qxyseries.cpp @@ -850,24 +850,8 @@ void QXYSeries::setPointConfiguration(const int index, const QXYSeries::PointCon const QVariant &value) { Q_D(QXYSeries); - QHash<QXYSeries::PointConfiguration, QVariant> conf; - if (d->m_pointsConfiguration.contains(index)) - conf = d->m_pointsConfiguration[index]; - - bool callSignal = false; - if (conf.contains(key)) { - if (conf[key] != value) - callSignal = true; - } else { - callSignal = true; - } - - conf[key] = value; - d->m_pointsConfiguration[index] = conf; - - if (callSignal) { + if (d->setPointConfiguration(index, key, value)) emit pointsConfigurationChanged(d->m_pointsConfiguration); - } } /*! @@ -939,6 +923,7 @@ void QXYSeries::sizeBy(const QList<qreal> &sourceData, const qreal minSize, cons const qreal range = max - min; const qreal sizeRange = maxSize - minSize; + bool changed = false; for (int i = 0; i < sourceData.size() && i < d->m_points.size(); ++i) { qreal pointSize = minSize; @@ -947,8 +932,12 @@ void QXYSeries::sizeBy(const QList<qreal> &sourceData, const qreal minSize, cons const qreal percentage = startValue / range; pointSize = minSize + (percentage * sizeRange); } - setPointConfiguration(i, QXYSeries::PointConfiguration::Size, pointSize); + if (d->setPointConfiguration(i, QXYSeries::PointConfiguration::Size, pointSize)) + changed = true; } + + if (changed) + emit pointsConfigurationChanged(d->m_pointsConfiguration); } /*! @@ -1019,12 +1008,18 @@ void QXYSeries::colorBy(const QList<qreal> &sourceData, const QLinearGradient &g const qreal diff = min < 0 ? qAbs(min) : 0; min += diff; + bool changed = false; + for (int i = 0; i < sourceData.size() && i < d->m_points.size(); ++i) { const qreal startValue = qMax(0.0, sourceData.at(i) + diff - min); const qreal percentage = startValue / range; QColor color = image.pixelColor(0, qMin(percentage * imgSize, imgSize - 1)); - setPointConfiguration(i, QXYSeries::PointConfiguration::Color, color); + if (d->setPointConfiguration(i, QXYSeries::PointConfiguration::Color, color)) + changed = true; } + + if (changed) + emit pointsConfigurationChanged(d->m_pointsConfiguration); } /*! @@ -2012,6 +2007,28 @@ QList<qreal> QXYSeriesPrivate::colorByData() const return m_colorByData; } +bool QXYSeriesPrivate::setPointConfiguration(const int index, + const QXYSeries::PointConfiguration key, + const QVariant &value) +{ + QHash<QXYSeries::PointConfiguration, QVariant> conf; + if (m_pointsConfiguration.contains(index)) + conf = m_pointsConfiguration[index]; + + bool changed = false; + if (conf.contains(key)) { + if (conf[key] != value) + changed = true; + } else { + changed = true; + } + + conf[key] = value; + m_pointsConfiguration[index] = conf; + + return changed; +} + QT_END_NAMESPACE #include "moc_qxyseries.cpp" diff --git a/src/charts/xychart/qxyseries_p.h b/src/charts/xychart/qxyseries_p.h index 21408610..40f438fd 100644 --- a/src/charts/xychart/qxyseries_p.h +++ b/src/charts/xychart/qxyseries_p.h @@ -14,6 +14,7 @@ #define QXYSERIES_P_H #include <private/qabstractseries_p.h> +#include <private/qxyseries_p.h> #include <QtCharts/private/qchartglobal_p.h> #include <QtCore/qvariant.h> #include <QtCore/qhash.h> @@ -24,7 +25,6 @@ QT_BEGIN_NAMESPACE -class QXYSeries; class QAbstractAxis; class Q_CHARTS_PRIVATE_EXPORT QXYSeriesPrivate: public QAbstractSeriesPrivate @@ -61,6 +61,10 @@ public: QList<qreal> colorByData() const; + bool setPointConfiguration(const int index, const QXYSeries::PointConfiguration key, + const QVariant &value); + + Q_SIGNALS: void seriesUpdated(); |