diff --git a/demos/chartviewer/window.cpp b/demos/chartviewer/window.cpp index 2993cb2..5d20ade 100644 --- a/demos/chartviewer/window.cpp +++ b/demos/chartviewer/window.cpp @@ -82,7 +82,6 @@ Window::Window(QWidget* parent) : settingsLayout->addStretch(); baseLayout->addItem(settingsLayout, 0, 3, 2, 1); //create charts - Charts::ChartList list = Charts::chartList(); for(int i = 0 ; i < 9 && iaddItem("Light", QChart::ChartThemeLight); themeComboBox->addItem("Blue Cerulean", QChart::ChartThemeBlueCerulean); @@ -159,7 +157,6 @@ QComboBox* Window::createThemeBox() QComboBox* Window::createAnimationBox() { - // settings layout QComboBox* animationComboBox = new ComboBox(this); animationComboBox->addItem("No Animations", QChart::NoAnimation); animationComboBox->addItem("GridAxis Animations", QChart::GridAxisAnimations); diff --git a/src/scatterchart/scatterchartitem.cpp b/src/scatterchart/scatterchartitem.cpp index b9f390a..b2535be 100644 --- a/src/scatterchart/scatterchartitem.cpp +++ b/src/scatterchart/scatterchartitem.cpp @@ -47,12 +47,6 @@ ScatterChartItem::ScatterChartItem(QScatterSeries *series, ChartPresenter *prese handleUpdated(); m_items.setHandlesChildEvents(false); - - // TODO: how to draw a drop shadow? -// QGraphicsDropShadowEffect *dropShadow = new QGraphicsDropShadowEffect(); -// dropShadow->setOffset(2.0); -// dropShadow->setBlurRadius(2.0); -// setGraphicsEffect(dropShadow); } QRectF ScatterChartItem::boundingRect() const @@ -68,16 +62,14 @@ void ScatterChartItem::createPoints(int count) switch (m_shape) { case QScatterSeries::MarkerShapeCircle: { - QGraphicsEllipseItem* i = new QGraphicsEllipseItem(0,0,m_size,m_size,this); - const QRectF& rect = i->boundingRect(); - i->setPos(-rect.width()/2,-rect.height()/2); - item = new Marker(i,this); + item = new CircleMarker(0,0,m_size,m_size,this); + const QRectF& rect = item->boundingRect(); + item->setPos(-rect.width()/2,-rect.height()/2); break; } case QScatterSeries::MarkerShapeRectangle: { - QGraphicsRectItem* i = new QGraphicsRectItem(0,0,m_size,m_size,this); - i->setPos(-m_size/2,-m_size/2); - item = new Marker(i,this); + item = new RectangleMarker(0,0,m_size,m_size,this); + item->setPos(-m_size/2,-m_size/2); break; } default: @@ -94,13 +86,15 @@ void ScatterChartItem::deletePoints(int count) QList items = m_items.childItems(); for (int i = 0; i < count; ++i) { - delete(items.takeLast()); + QGraphicsItem * item = items.takeLast(); + m_markerMap.remove(item); + delete(item); } } -void ScatterChartItem::markerSelected(Marker *marker) +void ScatterChartItem::markerSelected(QGraphicsItem *marker) { - emit XYChart::clicked(calculateDomainPoint(marker->point())); + emit XYChart::clicked(calculateDomainPoint(m_markerMap[marker])); } void ScatterChartItem::updateGeometry() @@ -128,10 +122,10 @@ void ScatterChartItem::updateGeometry() QList items = m_items.childItems(); for (int i = 0; i < points.size(); i++) { - Marker* item = static_cast(items.at(i)); + QGraphicsItem* item = items.at(i); const QPointF& point = points.at(i); const QRectF& rect = item->boundingRect(); - item->setPoint(point); + m_markerMap[item]=point; item->setPos(point.x()-rect.width()/2,point.y()-rect.height()/2); if(!m_visible || !clipRect().contains(point)) { item->setVisible(false); @@ -156,14 +150,14 @@ void ScatterChartItem::paint(QPainter *painter, const QStyleOptionGraphicsItem * void ScatterChartItem::setPen(const QPen& pen) { foreach(QGraphicsItem* item , m_items.childItems()) { - static_cast(item)->setPen(pen); + static_cast(item)->setPen(pen); } } void ScatterChartItem::setBrush(const QBrush& brush) { foreach(QGraphicsItem* item , m_items.childItems()) { - static_cast(item)->setBrush(brush); + static_cast(item)->setBrush(brush); } } @@ -195,12 +189,6 @@ void ScatterChartItem::handleUpdated() update(); } -void ScatterChartItem::mousePressEvent(QGraphicsSceneMouseEvent *event) -{ - emit XYChart::clicked(calculateDomainPoint(event->pos())); - QGraphicsItem::mousePressEvent(event); -} - #include "moc_scatterchartitem_p.cpp" QTCOMMERCIALCHART_END_NAMESPACE diff --git a/src/scatterchart/scatterchartitem_p.h b/src/scatterchart/scatterchartitem_p.h index cf2a6b2..d00fabe 100644 --- a/src/scatterchart/scatterchartitem_p.h +++ b/src/scatterchart/scatterchartitem_p.h @@ -38,7 +38,6 @@ QTCOMMERCIALCHART_BEGIN_NAMESPACE class QScatterSeries; -class Marker; class ScatterChartItem : public XYChart, public QGraphicsItem { @@ -55,7 +54,7 @@ public: void setPen(const QPen &pen); void setBrush(const QBrush &brush); - void markerSelected(Marker *item); + void markerSelected(QGraphicsItem *item); public Q_SLOTS: void handleUpdated(); @@ -66,7 +65,6 @@ private: protected: void updateGeometry(); - void mousePressEvent(QGraphicsSceneMouseEvent *event); private: QScatterSeries *m_series; @@ -75,76 +73,47 @@ private: int m_shape; int m_size; QRectF m_rect; + QMap m_markerMap; }; - -class Marker: public QAbstractGraphicsShapeItem +class CircleMarker: public QGraphicsEllipseItem { public: - - Marker(QAbstractGraphicsShapeItem *item , ScatterChartItem *parent) : QAbstractGraphicsShapeItem(0) ,m_item(item), m_parent(parent) - { - } - - ~Marker() - { - delete m_item; - } - - void setPoint(const QPointF& point) - { - m_point=point; - } - - QPointF point() const - { - return m_point; - } - - QPainterPath shape() const - { - return m_item->shape(); - } - - QRectF boundingRect() const + CircleMarker(qreal x, qreal y, qreal w, qreal h, ScatterChartItem *parent) : QGraphicsEllipseItem(x,y,w,h,parent), + m_parent(parent) { - return m_item->boundingRect(); } - bool contains(const QPointF &point) const +protected: + void mousePressEvent(QGraphicsSceneMouseEvent *event) { - return m_item->contains(point); + m_parent->markerSelected(this); + QGraphicsEllipseItem::mousePressEvent(event); } - void setPen(const QPen &pen) - { - m_item->setPen(pen); - } +private: + ScatterChartItem* m_parent; +}; - void setBrush(const QBrush &brush) - { - m_item->setBrush(brush); - } +class RectangleMarker: public QGraphicsRectItem +{ - void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +public: + RectangleMarker(qreal x, qreal y, qreal w, qreal h, ScatterChartItem *parent) : QGraphicsRectItem(x,y,w,h,parent), + m_parent(parent) { - m_item->paint(painter,option,widget); } protected: - void mousePressEvent(QGraphicsSceneMouseEvent *event) { - Q_UNUSED(event) m_parent->markerSelected(this); - QAbstractGraphicsShapeItem::mousePressEvent(event); + QGraphicsRectItem::mousePressEvent(event); } private: - QAbstractGraphicsShapeItem* m_item; ScatterChartItem* m_parent; - QPointF m_point; }; QTCOMMERCIALCHART_END_NAMESPACE