diff --git a/doc/images/chartview_example_scatter.jpg b/doc/images/chartview_example_scatter.jpg index c03b8d4074fd6903c2ea9688d2ec430d0ee81c87..8b8968d1236a96fdfbb06183b521722c46745a40 100644 GIT binary patch literal 26433 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%0D>X=4jBSJ;SJAMUPMA75=@wLqZpVk?9f?+D9qrE6 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

S++=E)6fm6gFL4l z+vwaOex1U!3h#w8h#j7>CUz>%(Do0jesR;!$Tmf)KUNf`ibmGo@dgpqJW%@7svO%Q%*GuWwVz* z9Bj}|5EqXpE|+D_KC$ziyxY}{J_0E;cToX(abs@RP-WMbbx-wq1Mro=Y1YeSpGG)U zAx_>%oZ!!Kf5k9pXHS-wr{c`U=;q_h;Ll?dy<~IoR)Sz zQa1=)^8EWp&MGOf@7Q%}vx;|q{CNr=sE$PyE<2RpP8iDHbx*(L9@{r_^YPEH-RpPN zRTB%n0uv#F8a6hSsRB%PNP+y@s>vV+A8{bqI*8IcF(}T==U}WdovJ`bE9AH17qwTq zf~>6T3f|y4`Z^3ZgbNiLD!(nzYT{=Z=Mq2lDV-iES7|Oufx)=gJHGOXp1|{HWA}+7 z^=nk=wLTq+a%i%*MyNP~n)T9OJz*|RV0?tATC~#ugPk6(+R=MupG9r;wgvf4`cs>h zTeyvew}^p?l_!{N8xxP;P>kL9wQ%86HQA!vuHAMoqsk^`$n9GGnul>%KP7bxBO?)n zgp(^~HS-vk38!Omn%Y7G*uFD>2c)JmDJoFoFWu29lTNJ738646HTKBT)lJz4UP1?upoJHa{N*JCBwPoVmoT;ER8$I zC(Em$onXKn?JoRTGMkC77?DczQtroW$YNUNB<^ACJJDM$cCKJ*sF7XWxwEH;G6m&x zj@4C%a$C-|ipg`*mQSsDLuJDlkf_jhZ3_}juVJbfeDqhhkl&;ctYjIJH`|9@xGnt7vd)=G%JkZBO&mVuF#DbLh$}^=Sr*|R z8r@IWmnxzt@BAW|Tf}Q92!kiuX*7WvcbybX(nDonfL%(ceDk+u@XPs?`Oz9=*`pJQ zn_^k$=Z(E;?nEQ9e2Eq9cASdMxQ)77*9PfLlodE!g!Z<=VP_4h(q}Zsqm6in5q! zcJlcGC@_{f*FLzx6>C?@Z|SHkNeTR57SG;cmE8%|*rKTcY>h=Ki1L_j$5eqy>^Mtd zHVv$Wg3GD$>~4>!OwRD!c2dYz8e9Jxl(Y}}2kSQnZrM#=@b0CQgg5IU^_ezB1u=X# zIKLQCJfNL3J9X_;YGS@Ppy4I~K@K@olyw|)q@KL9#TMRq7?KEBy?0Lzpdga`h1RnX z-rxi>=>Y*HMyk%ER$-I1NF{THk}E(xSfciHkGWB29y1r@GR4MTC?T$2kD@6jMgn~$ zyr!gsVkgA4nVCc}t8ZFgXPeN*o>!x!fBQ2}jTD1uxXoZjvZ2@4UA&&39SWSHTx-RM z8B7M{-B<=s!Gb``ZNUN!XHg1gd1BY1M5ah7pPfmYXf}(bBQp$R5BMjyhyg6>M{${8 z3(&YZ8fBl~Ss-N+R;@D4u-e zSrP@md=t13Cyz|*4OBx3E2)(Q3Ub9B5e_XyH9r@qrpo=K=asps#1k_Kt9Tmq!+Xrv zc|X~lv&!lEIFc_so^@A_@58L~(z+jq)|*}neGkTRVXi~sVa^F~$gy{J_P3GeIDn!XHME1utQ}^RDS6oRtwV3#X$?3aW6wf&iTK%8BKhc6S z2MEQn1QulUN`QHEJpK${fzW)t*z~8Qa zHTKTITtZz!9Yul+r^lRhSjF(v6h<|$A%*Tg8`FFA^0 zpFJ>Wf5zJ~oO#`4Oc-CCcusURwBAzn9c>Z&z)wwmIZEJah>J3G9^Ff_QEJ>Jk11B@ z`AVsK_&PxFM<(gR@U}_!erVS+P{4%7h}PzHkW&PTcl2FtjwY7At|#Sb3hMZqm0r&G zb=rKS{Ih{VHxmIK$&H##o)98?$DsT@R@Od|Z~Lmt%*(a#8XieH3J1aROLImx#6R*v z*ZxzYg8nBuqy7)tq<=G7nRjPOx5Vt=u7iwC`sot`_HW16=1nx0Ex`POTwi6^T~-3Z z;(ZDy({{_#_YAlL_VZmcM;j$JHL+!$?zh;!>01(sg~C1I+ajDEaswzAsqBl_ki~(V z%6+l@+WiK?x&;q737=1&BaW!I<&pPbXwFLr58Oo6)6C?|!0FqT${oF^mqV8VUGvNh zg)KrvRhw2r)dORZ!_&yJd9`zuMRioV_l%317SBCcPn%#c2p~%ua*tj_L+7XL*i_tz z+f0Q&TV{N`n%hE_ub3c-ZG^14BK~aqev2-sNPkxg22>42)MYa!^@ri$1$Nkl%rI4p zjb(8MA7PsESf;P51uLGJ1qGc_DT*Arm2%_(e2blW1hJ#C{aSmr<~c@CXhdsJd?>)S_5H&YAbtK%%FloHFMInI@nee@Qggj) zn1c|}S9e-Bj}6WnF9b?VKmvTdCdd}KgL(*{$6lp?_#lp)Z_Z6))u8!t+}9}NCz z!CbIQMCDD>fSr=U;@8w4Ne+}Uy?bJsMON)L z_iRo;JjvxVZBXLk@6oJPx73rPG5N+{g0mk`p9y42&9nwmol={}dKhI$$MlULpFn|s zBTavhug5y&SAajzoj(x&Y%pq!!2Aa)k&OD9**N;#e197@;qC*PdGk@WN(FHCW^79D zE?@K5_lyhGF|2`nf^GUf1fbUDN+ezoL5gB$fC%gFQqo*|5C%p_N-er(8N<;yOAG5A zL!lQ9HLqL!3@Dr<>&v+R`up zNv4I9JopfbwxDl)QL|HwabI0pzn<(%(q@B)(ba(*bub`z1gfZHm?m%oT<-YaReBQy zAP0p?WGpDf-c6f|#*GrEGw-iS9j}z7fLSA?cZF25fb6BB`W^?Z39=-%VciK-GbY~; zlHNW2fCuU1@Povke0rjqwf&{Wh!O7YOTiad%xZ4X1sGFY5H&Pr%KXjH8Y7hdPyCia zEu|AdYTBryBOu*1i-wpyxo^>`Mu>vgRd-sepwinWW=SP?+%1-Kq#5)W51Z(6K@f6& z5|9W4+9b?J2j==JfGWR*T`tXffY7QDFiU>vN!!}>IVd-QJ8~9<-W*3CilUa;i=hc! zqesL7pD}mKqKk6%>MM9l5a-|~0r5>Vg+3qXMqMs8`XhjAi*jW>+4_gmAmkh*K=ax?O&id9)b;L;TLzUs`R@!}SD8c>`iWG(B+&r(Qe zMVF34k+Fi*o~t<9t0&=X`0#?`*{jjt^M5wu@5X~XS1rf;J}>#JhKCGIBQ%WCaE+SO zyqDd5{K>lt}y#W)<);~ z#E9NrJcE79%`zA0<%QFA)!Asi!<>^@_7#@r)N}g&Q5+8SdqZt8{Y?!NevO!#oavq< zH#i~jIE5bPC>&UYKnn>*De5{uvIrFWZ0Mct^+7O?^2lrmgnnNN^EX0~siC7O)pGv$M(>FHV!x9@zG5*|ViT<} z7}OA&j-wDUpje}2(C2l!Lv8=8N(BF8XZi{dZE1+-QosZ0Q=6yk;ho%0P_Od!Vxqn{ zs{=njF~fa?UE`59xz>Ko_3hcs9ZguII26q1Ni3+S$+GWVFX55up7#O<|_KPt38HB6?V&?NQYbu?=O zo;~43{;S!D4Awb?J&?Iue9=A(G__*E7Bxjf0jf)jdDk=2Xo_c6o2MqPenv4Sh>$tW+}Nm0FJDcuJ7-4>&#Vel69U&a)<; zNsX4(ax$=MOra5^F#DELFr3{Suo*B{VfCO0aJTjn=F=rc6Wk+ZY!uJGAgW|8p4~l(nS_}G=JMiJ&#_Q-*tgvl^oIp`ubbga2H%$t~b5Ndo zC3+@h`uXGpU0yzrF~{ldjlDv;<}M#J1W2FW>0kR^HT|}2`1O}@sfk9+K|}<G=x#adUy!g%Y&Dqha0Ltj^O??mAEp913zQd zao&rcm=?m^{=~llG_#ihq(kIZWelzz^Lm-n=&lVD_Lap&v%&um{)h0NR1+PXN;TKx o`q`wzt^F2tfz_5u^3C~iV)wej6j;PM=`|X~gO^T^I<6M}7f0aZ@&Et; literal 28267 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 diff --git a/src/chartpresenter.cpp b/src/chartpresenter.cpp index ce33e1a..5322543 100644 --- a/src/chartpresenter.cpp +++ b/src/chartpresenter.cpp @@ -217,8 +217,6 @@ void ChartPresenter::handleSeriesAdded(QSeries* series,Domain* domain) case QSeries::SeriesTypeScatter: { QScatterSeries *scatterSeries = qobject_cast(series); ScatterPresenter *scatterPresenter = new ScatterPresenter(scatterSeries, m_chart); - QObject::connect(scatterPresenter, SIGNAL(clicked(QPointF)), - scatterSeries, SIGNAL(clicked(QPointF))); QObject::connect(this, SIGNAL(geometryChanged(const QRectF&)), scatterPresenter, SLOT(handleGeometryChanged(const QRectF&))); QObject::connect(domain, SIGNAL(domainChanged(qreal,qreal,qreal,qreal)), diff --git a/src/scatterseries/qscatterseries.cpp b/src/scatterseries/qscatterseries.cpp index 241a779..7deba86 100644 --- a/src/scatterseries/qscatterseries.cpp +++ b/src/scatterseries/qscatterseries.cpp @@ -33,6 +33,7 @@ \value MarkerShapeDefault \value MarkerShapeX \value MarkerShapeRectangle + \value MarkerShapeRoundedRectangle \value MarkerShapeTiltedRectangle \value MarkerShapeTriangle \value MarkerShapeCircle @@ -50,14 +51,10 @@ data point you can use closestPoint(). */ -/*! - \fn void QScatterSeries::changed() - \brief TODO -*/ - QTCOMMERCIALCHART_BEGIN_NAMESPACE -QScatterSeriesPrivate::QScatterSeriesPrivate() : +QScatterSeriesPrivate::QScatterSeriesPrivate(QObject *parent) : + QObject(parent), m_data(QList()), m_markerPen(QPen(QColor::Invalid)), m_markerBrush(QBrush(QColor::Invalid)), @@ -66,12 +63,19 @@ QScatterSeriesPrivate::QScatterSeriesPrivate() : { } +void QScatterSeriesPrivate::emitChanged() +{ + emit changed(); +} + +#include "moc_scatterseries_p.cpp" + /*! Constructs a series object which is a child of \a parent. */ QScatterSeries::QScatterSeries(QObject *parent) : QSeries(parent), - d(new QScatterSeriesPrivate()) + d(new QScatterSeriesPrivate(this)) { } @@ -89,7 +93,7 @@ QScatterSeries::~QScatterSeries() void QScatterSeries::add(qreal x, qreal y) { d->m_data.append(QPointF(x, y)); - emit changed(); + d->emitChanged(); } /*! @@ -98,7 +102,7 @@ void QScatterSeries::add(qreal x, qreal y) void QScatterSeries::add(QPointF value) { d->m_data.append(value); - emit changed(); + d->emitChanged(); } /*! @@ -107,7 +111,7 @@ void QScatterSeries::add(QPointF value) void QScatterSeries::add(QList points) { d->m_data.append(points); - emit changed(); + d->emitChanged(); } /*! @@ -120,7 +124,7 @@ void QScatterSeries::add(QList points) QScatterSeries& QScatterSeries::operator << (const QPointF &value) { d->m_data.append(value); - emit changed(); + d->emitChanged(); return *this; } @@ -131,7 +135,7 @@ QScatterSeries& QScatterSeries::operator << (const QPointF &value) QScatterSeries& QScatterSeries::operator << (QList value) { d->m_data.append(value); - emit changed(); + d->emitChanged(); return *this; } @@ -141,7 +145,7 @@ QScatterSeries& QScatterSeries::operator << (QList value) void QScatterSeries::setData(QList points) { d->m_data = points; - emit changed(); + d->emitChanged(); } /*! @@ -160,7 +164,7 @@ bool QScatterSeries::replace(int index, QPointF newPoint) { if (index >= 0 && index < d->m_data.count()) { d->m_data.replace(index, newPoint); - emit changed(); + d->emitChanged(); return true; } return false; @@ -174,7 +178,7 @@ bool QScatterSeries::removeAt(int index) { if (index >=0 && index < d->m_data.count()) { d->m_data.removeAt(index); - emit changed(); + d->emitChanged(); return true; } return false; @@ -186,7 +190,7 @@ bool QScatterSeries::removeAt(int index) int QScatterSeries::removeAll(QPointF point) { int count = d->m_data.removeAll(point); - emit changed(); + d->emitChanged(); return count; } @@ -196,7 +200,7 @@ int QScatterSeries::removeAll(QPointF point) void QScatterSeries::clear() { d->m_data.clear(); - emit changed(); + d->emitChanged(); } /*! @@ -220,23 +224,32 @@ int QScatterSeries::closestPoint(QPointF coordinate) } /*! + Returns the pen used for drawing markers. +*/ +QPen QScatterSeries::pen() const +{ + return d->m_markerPen; +} + +/*! Overrides the default pen used for drawing a marker item with a user defined \a pen. The default pen is defined by chart theme setting. \sa setBrush() \sa QChart::setChartTheme() */ -void QScatterSeries::setPen(QPen pen) +void QScatterSeries::setPen(const QPen &pen) { d->m_markerPen = pen; + d->emitChanged(); } /*! - Returns the pen used for drawing markers. + Returns the brush used for drawing markers. */ -QPen QScatterSeries::pen() +QBrush QScatterSeries::brush() const { - return d->m_markerPen; + return d->m_markerBrush; } /*! @@ -246,17 +259,18 @@ QPen QScatterSeries::pen() \sa setPen() \sa QChart::setChartTheme() */ -void QScatterSeries::setBrush(QBrush brush) +void QScatterSeries::setBrush(const QBrush &brush) { d->m_markerBrush = brush; + d->emitChanged(); } /*! - Returns the brush used for drawing markers. + Returns the shape used for drawing markers. */ -QBrush QScatterSeries::brush() +QScatterSeries::MarkerShape QScatterSeries::shape() const { - return d->m_markerBrush; + return (QScatterSeries::MarkerShape) d->m_markerShape; } /*! @@ -266,20 +280,13 @@ QBrush QScatterSeries::brush() void QScatterSeries::setShape(MarkerShape shape) { d->m_markerShape = shape; -} - -/*! - Returns the shape used for drawing markers. -*/ -QScatterSeries::MarkerShape QScatterSeries::shape() -{ - return (QScatterSeries::MarkerShape) d->m_markerShape; + d->emitChanged(); } /*! Returns the size of the marker items. */ -qreal QScatterSeries::size() +qreal QScatterSeries::size() const { return d->m_markerSize; } @@ -290,7 +297,7 @@ qreal QScatterSeries::size() void QScatterSeries::setSize(qreal size) { d->m_markerSize = size; - emit changed(); + d->emitChanged(); } #include "moc_qscatterseries.cpp" diff --git a/src/scatterseries/qscatterseries.h b/src/scatterseries/qscatterseries.h index bd3176a..c8f4856 100644 --- a/src/scatterseries/qscatterseries.h +++ b/src/scatterseries/qscatterseries.h @@ -19,6 +19,7 @@ public: MarkerShapeDefault = 0, MarkerShapeX, MarkerShapeRectangle, + MarkerShapeRoundedRectangle, MarkerShapeTiltedRectangle, MarkerShapeTriangle, MarkerShapeCircle @@ -46,26 +47,23 @@ public: int closestPoint(QPointF coordinate); //TODO: insert, replace...? - QPen pen(); - void setPen(QPen pen); - QBrush brush(); - void setBrush(QBrush brush); - MarkerShape shape(); + QPen pen() const; + void setPen(const QPen &pen); + QBrush brush() const; + void setBrush(const QBrush &brush); + MarkerShape shape() const; void setShape(MarkerShape shape); - qreal size(); + qreal size() const; void setSize(qreal size); Q_SIGNALS: void clicked(QPointF coordinate); - // TODO: move to PIMPL for simplicity or does the user ever need changed signals? - // TODO: more finegrained signaling for performance reasons - // (check QPieSeries implementation with change sets) - void changed(); private: Q_DECLARE_PRIVATE(QScatterSeries) Q_DISABLE_COPY(QScatterSeries) - QScatterSeriesPrivate *const d; + friend class ScatterPresenter; + QScatterSeriesPrivate *d; }; QTCOMMERCIALCHART_END_NAMESPACE diff --git a/src/scatterseries/scatterpresenter.cpp b/src/scatterseries/scatterpresenter.cpp index 369f52e..f30c5ed 100644 --- a/src/scatterseries/scatterpresenter.cpp +++ b/src/scatterseries/scatterpresenter.cpp @@ -1,5 +1,6 @@ #include "scatterpresenter_p.h" #include "qscatterseries.h" +#include "scatterseries_p.h" #include "chartpresenter_p.h" #include #include @@ -20,13 +21,12 @@ ScatterPresenter::ScatterPresenter(QScatterSeries *series, QGraphicsObject *pare m_series(series), m_clippingRect() { - if (parent) - m_clippingRect = parent->boundingRect(); - - if (series) { - connect(series, SIGNAL(changed()), this, SLOT(handleModelChanged())); - } + Q_ASSERT(parent); + Q_ASSERT(series); + m_clippingRect = parent->boundingRect(); + connect(series->d, SIGNAL(changed()), this, SLOT(handleModelChanged())); + connect(this, SIGNAL(clicked(QPointF)), series, SIGNAL(clicked(QPointF))); setZValue(ChartPresenter::ScatterSeriesZValue); // TODO: how to draw a drop shadow? @@ -136,11 +136,21 @@ void ScatterPresenter::changeGeometry() case QScatterSeries::MarkerShapeRectangle: m_path.addRect(x, y, size, size); break; + case QScatterSeries::MarkerShapeRoundedRectangle: + m_path.addRoundedRect(x, y, size, size, size / 4.0, size / 4.0); + break; case QScatterSeries::MarkerShapeTiltedRectangle: { // TODO: tilt the rectangle m_path.addRect(x, y, size, size); break; } + case QScatterSeries::MarkerShapeTriangle: { + QPolygonF polygon; + polygon << QPointF(0.0, -size) << QPointF(size / 2.0, 0.0) << QPointF(-size / 2, 0.0); + // TODO: the position is not exactly right... + m_path.addPolygon(polygon.translated(x + size / 2.0, y + size)); + break; + } default: // TODO: implement the rest of the shapes Q_ASSERT(false); diff --git a/src/scatterseries/scatterseries_p.h b/src/scatterseries/scatterseries_p.h index a46091b..e03222f 100644 --- a/src/scatterseries/scatterseries_p.h +++ b/src/scatterseries/scatterseries_p.h @@ -3,6 +3,7 @@ #include "qchartglobal.h" #include "qseries.h" +#include #include QTCOMMERCIALCHART_BEGIN_NAMESPACE @@ -10,10 +11,18 @@ QTCOMMERCIALCHART_BEGIN_NAMESPACE /*! * The PIMPL class of QScatterSeries. */ -class QScatterSeriesPrivate +class QScatterSeriesPrivate : public QObject { + Q_OBJECT + public: - QScatterSeriesPrivate(); + QScatterSeriesPrivate(QObject *parent); + void emitChanged(); + +Q_SIGNALS: + // TODO: more finegrained signaling for performance reasons + // (see for example QPieSeries implementation with change sets) + void changed(); public: QList m_data;