diff --git a/examples/presenterchart/chartview.cpp b/examples/presenterchart/chartview.cpp index 70f746c..280a2de 100644 --- a/examples/presenterchart/chartview.cpp +++ b/examples/presenterchart/chartview.cpp @@ -60,9 +60,14 @@ m_index(0) m_series< +#include QTCOMMERCIALCHART_BEGIN_NAMESPACE @@ -22,6 +23,7 @@ m_pointsVisible(false) } QObject::connect(areaSeries,SIGNAL(updated()),this,SLOT(handleUpdated())); + QObject::connect(this,SIGNAL(clicked(const QPointF&)),areaSeries,SIGNAL(clicked(const QPointF&))); handleUpdated(); } @@ -108,6 +110,11 @@ void AreaChartItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *opt painter->restore(); } +void AreaChartItem::mousePressEvent( QGraphicsSceneMouseEvent * event ) +{ + emit clicked(m_upper->calculateDomainPoint(event->pos())); +} + #include "moc_areachartitem_p.cpp" QTCOMMERCIALCHART_END_NAMESPACE diff --git a/src/areachart/areachartitem_p.h b/src/areachart/areachartitem_p.h index bec2e0b..477efad 100644 --- a/src/areachart/areachartitem_p.h +++ b/src/areachart/areachartitem_p.h @@ -26,6 +26,13 @@ public: LineChartItem* lowerLineItem() const { return m_lower ;} void updatePath(); + +protected: + void mousePressEvent( QGraphicsSceneMouseEvent * event ); + +signals: + void clicked(const QPointF& point); + public slots: void handleUpdated(); void handleDomainChanged(qreal minX, qreal maxX, qreal minY, qreal maxY); diff --git a/src/areachart/qareaseries.cpp b/src/areachart/qareaseries.cpp index 5b6ce2e..c3db58c 100644 --- a/src/areachart/qareaseries.cpp +++ b/src/areachart/qareaseries.cpp @@ -92,7 +92,10 @@ QAreaSeries::~QAreaSeries() */ void QAreaSeries::setPen(const QPen& pen) { - m_pen=pen; + if(m_pen!=pen){ + m_pen=pen; + emit updated(); + } } /*! @@ -100,14 +103,20 @@ void QAreaSeries::setPen(const QPen& pen) */ void QAreaSeries::setBrush(const QBrush& brush) { - m_brush=brush; + if(m_brush!=brush){ + m_brush=brush; + emit updated(); + } } /*! Sets if data points are \a visible and should be drawn on line. */ void QAreaSeries::setPointsVisible(bool visible) { - m_pointsVisible=visible; + if(m_pointsVisible!=visible){ + m_pointsVisible=visible; + emit updated(); + } } #include "moc_qareaseries.cpp" diff --git a/src/areachart/qareaseries.h b/src/areachart/qareaseries.h index d7f8cff..16a023a 100644 --- a/src/areachart/qareaseries.h +++ b/src/areachart/qareaseries.h @@ -34,6 +34,7 @@ public: // from QChartSeries signals: void updated(); + void clicked(const QPointF& point); private: QBrush m_brush; diff --git a/src/linechart/linechartitem.cpp b/src/linechart/linechartitem.cpp index 8bb22b6..c90a7cd 100644 --- a/src/linechart/linechartitem.cpp +++ b/src/linechart/linechartitem.cpp @@ -2,7 +2,6 @@ #include "qlineseries.h" #include "chartpresenter_p.h" #include -#include QTCOMMERCIALCHART_BEGIN_NAMESPACE @@ -15,7 +14,6 @@ m_pointsVisible(false) { setZValue(ChartPresenter::LineChartZValue); QObject::connect(series,SIGNAL(updated()),this,SLOT(handleUpdated())); - QObject::connect(this,SIGNAL(clicked(const QPointF&)),series,SIGNAL(clicked(const QPointF&))); handleUpdated(); } @@ -78,11 +76,6 @@ void LineChartItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *opt painter->restore(); } -void LineChartItem::mousePressEvent( QGraphicsSceneMouseEvent * event ) -{ - emit clicked(calculateDomainPoint(event->pos())); -} - #include "moc_linechartitem_p.cpp" QTCOMMERCIALCHART_END_NAMESPACE diff --git a/src/linechart/linechartitem_p.h b/src/linechart/linechartitem_p.h index ce0c1f7..9b3561d 100644 --- a/src/linechart/linechartitem_p.h +++ b/src/linechart/linechartitem_p.h @@ -24,12 +24,8 @@ public: public slots: void handleUpdated(); -signals: - void clicked(const QPointF& point); - protected: void setLayout(QVector& points); - void mousePressEvent( QGraphicsSceneMouseEvent * event ); private: QLineSeries* m_series; diff --git a/src/linechart/qlineseries.cpp b/src/linechart/qlineseries.cpp index f5bfbc7..906d628 100644 --- a/src/linechart/qlineseries.cpp +++ b/src/linechart/qlineseries.cpp @@ -65,7 +65,7 @@ void QLineSeries::setLinePen(const QPen& pen) { if(pen!=m_pen){ m_pen=pen; - emit updated(); + emit QXYSeries::updated(); } } @@ -76,7 +76,7 @@ void QLineSeries::setPointsVisible(bool visible) { if(m_pointsVisible!=visible){ m_pointsVisible=visible; - emit updated(); + emit QXYSeries::updated(); } } @@ -93,6 +93,4 @@ QDebug operator<< (QDebug debug, const QLineSeries series) return debug.space(); } -#include "moc_qlineseries.cpp" - QTCOMMERCIALCHART_END_NAMESPACE diff --git a/src/linechart/qlineseries.h b/src/linechart/qlineseries.h index 2847b59..9959af7 100644 --- a/src/linechart/qlineseries.h +++ b/src/linechart/qlineseries.h @@ -11,7 +11,6 @@ QTCOMMERCIALCHART_BEGIN_NAMESPACE class QTCOMMERCIALCHART_EXPORT QLineSeries : public QXYSeries { - Q_OBJECT public: QLineSeries(QObject* parent=0); virtual ~QLineSeries(); @@ -22,9 +21,6 @@ public: void setPointsVisible(bool visible); bool pointsVisible() const {return m_pointsVisible;} -signals: - void clicked(const QPointF& point); - public: // from QChartSeries virtual QSeriesType type() const {return QSeries::SeriesTypeLine;} friend QDebug operator<< (QDebug d, const QLineSeries series); diff --git a/src/qchart.cpp b/src/qchart.cpp index 3569718..aaca02c 100644 --- a/src/qchart.cpp +++ b/src/qchart.cpp @@ -124,6 +124,7 @@ void QChart::setChartTitle(const QString& title) { createChartTitleItem(); m_titleItem->setText(title); + updateLayout(); } /*! @@ -144,6 +145,7 @@ void QChart::setChartTitleFont(const QFont& font) { createChartTitleItem(); m_titleItem->setFont(font); + updateLayout(); } /*! @@ -153,6 +155,7 @@ void QChart::setChartTitleBrush(const QBrush &brush) { createChartTitleItem(); m_titleItem->setBrush(brush); + updateLayout(); } /*! @@ -197,6 +200,7 @@ int QChart::margin() const void QChart::setMargin(int margin) { m_presenter->setMargin(margin); + updateLayout(); } /*! @@ -282,19 +286,7 @@ void QChart::resizeEvent(QGraphicsSceneResizeEvent *event) { m_rect = QRectF(QPoint(0,0),event->newSize()); - QRectF rect = m_rect.adjusted(margin(),margin(), -margin(), -margin()); - - // recalculate title position - if (m_titleItem) { - QPointF center = m_rect.center() -m_titleItem->boundingRect().center(); - m_titleItem->setPos(center.x(),m_rect.top()/2 + margin()/2); - } - - //recalculate background gradient - if (m_backgroundItem) { - m_backgroundItem->setRect(rect); - } - + updateLayout(); QGraphicsWidget::resizeEvent(event); update(); } @@ -328,6 +320,23 @@ void QChart::scroll(int dx,int dy) m_presenter->scroll(0,-m_presenter->geometry().width()/(axisY()->ticksCount()-1)); } +void QChart::updateLayout() +{ + if(!m_rect.isValid()) return; + + QRectF rect = m_rect.adjusted(margin(),margin(), -margin(), -margin()); + + // recalculate title position + if (m_titleItem) { + QPointF center = m_rect.center() -m_titleItem->boundingRect().center(); + m_titleItem->setPos(center.x(),m_rect.top()/2 + margin()/2); + } + + //recalculate background gradient + if (m_backgroundItem) { + m_backgroundItem->setRect(rect); + } +} #include "moc_qchart.cpp" QTCOMMERCIALCHART_END_NAMESPACE diff --git a/src/qchart.h b/src/qchart.h index 1b9e66d..e00bbae 100644 --- a/src/qchart.h +++ b/src/qchart.h @@ -85,6 +85,7 @@ protected: private: inline void createChartBackgroundItem(); inline void createChartTitleItem(); + void updateLayout(); private: Q_DISABLE_COPY(QChart) diff --git a/src/scatterseries/qscatterseries.cpp b/src/scatterseries/qscatterseries.cpp index feb2fc7..040e404 100644 --- a/src/scatterseries/qscatterseries.cpp +++ b/src/scatterseries/qscatterseries.cpp @@ -96,8 +96,4 @@ void QScatterSeries::setSize(qreal size) emit updated(); } - - -#include "moc_qscatterseries.cpp" - QTCOMMERCIALCHART_END_NAMESPACE diff --git a/src/scatterseries/qscatterseries.h b/src/scatterseries/qscatterseries.h index 98fa178..851fee1 100644 --- a/src/scatterseries/qscatterseries.h +++ b/src/scatterseries/qscatterseries.h @@ -11,7 +11,6 @@ class QScatterSeriesPrivate; class QTCOMMERCIALCHART_EXPORT QScatterSeries : public QXYSeries { - Q_OBJECT public: enum MarkerShape { @@ -32,9 +31,6 @@ public: qreal size() const; void setSize(qreal size); -signals: - void clicked(const QPointF& point); - private: MarkerShape m_shape; qreal m_size; diff --git a/src/scatterseries/scatterchartitem.cpp b/src/scatterseries/scatterchartitem.cpp index 5ca96d0..6f27053 100644 --- a/src/scatterseries/scatterchartitem.cpp +++ b/src/scatterseries/scatterchartitem.cpp @@ -24,7 +24,6 @@ ScatterChartItem::ScatterChartItem(QScatterSeries *series, QGraphicsItem *parent Q_ASSERT(series); QObject::connect(m_series,SIGNAL(updated()), this, SLOT(handleUpdated())); - QObject::connect(this,SIGNAL(clicked(const QPointF&)), m_series, SIGNAL(clicked(const QPointF&))); setZValue(ChartPresenter::ScatterSeriesZValue); setFlags(QGraphicsItem::ItemHasNoContents); @@ -87,7 +86,7 @@ void ScatterChartItem::deletePoints(int count) void ScatterChartItem::markerSelected(Marker* marker) { - emit clicked(QPointF(m_series->x(marker->index()), m_series->y(marker->index()))); + emit XYChartItem::clicked(QPointF(m_series->x(marker->index()), m_series->y(marker->index()))); } void ScatterChartItem::setLayout(QVector& points) @@ -176,6 +175,10 @@ void ScatterChartItem::handleUpdated() } +void ScatterChartItem::mousePressEvent( QGraphicsSceneMouseEvent * event ) +{ +} + #include "moc_scatterchartitem_p.cpp" QTCOMMERCIALCHART_END_NAMESPACE diff --git a/src/scatterseries/scatterchartitem_p.h b/src/scatterseries/scatterchartitem_p.h index 06dd2d0..8257be2 100644 --- a/src/scatterseries/scatterchartitem_p.h +++ b/src/scatterseries/scatterchartitem_p.h @@ -27,9 +27,6 @@ public: void markerSelected(Marker* item); -signals: - void clicked(const QPointF& point); - public slots: void handleUpdated(); @@ -39,6 +36,7 @@ private: protected: void setLayout(QVector& points); + void mousePressEvent( QGraphicsSceneMouseEvent * event ); private: QScatterSeries *m_series; diff --git a/src/splinechart/splinechartitem_p.h b/src/splinechart/splinechartitem_p.h index 5b9f77f..8add51e 100644 --- a/src/splinechart/splinechartitem_p.h +++ b/src/splinechart/splinechartitem_p.h @@ -18,8 +18,6 @@ public: void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); QPainterPath shape() const; - void setPointsVisible(bool visible); - public slots: void handleUpdated(); diff --git a/src/xychart/qxyseries.h b/src/xychart/qxyseries.h index bc918db..6b8c96b 100644 --- a/src/xychart/qxyseries.h +++ b/src/xychart/qxyseries.h @@ -51,6 +51,7 @@ public: void modelDataRemoved(QModelIndex parent, int start, int end); signals: + void clicked(const QPointF& point); void updated(); void pointReplaced(int index); void pointRemoved(int index); diff --git a/src/xychart/xychartitem.cpp b/src/xychart/xychartitem.cpp index 531917c..57488a4 100644 --- a/src/xychart/xychartitem.cpp +++ b/src/xychart/xychartitem.cpp @@ -3,6 +3,7 @@ #include "chartpresenter_p.h" #include "chartanimator_p.h" #include +#include QTCOMMERCIALCHART_BEGIN_NAMESPACE @@ -19,7 +20,7 @@ m_series(series) QObject::connect(series,SIGNAL(pointReplaced(int)),this,SLOT(handlePointReplaced(int))); QObject::connect(series,SIGNAL(pointAdded(int)),this,SLOT(handlePointAdded(int))); QObject::connect(series,SIGNAL(pointRemoved(int)),this,SLOT(handlePointRemoved(int))); - + QObject::connect(this,SIGNAL(clicked(const QPointF&)),series,SIGNAL(clicked(const QPointF&))); } QPointF XYChartItem::calculateGeometryPoint(const QPointF& point) const @@ -151,6 +152,11 @@ bool XYChartItem::isEmpty() return !m_clipRect.isValid() || m_maxX - m_minX == 0 || m_maxY - m_minY ==0 ; } +void XYChartItem::mousePressEvent( QGraphicsSceneMouseEvent * event ) +{ + emit clicked(calculateDomainPoint(event->pos())); +} + #include "moc_xychartitem_p.cpp" QTCOMMERCIALCHART_END_NAMESPACE diff --git a/src/xychart/xychartitem_p.h b/src/xychart/xychartitem_p.h index beaefcc..a156705 100644 --- a/src/xychart/xychartitem_p.h +++ b/src/xychart/xychartitem_p.h @@ -27,12 +27,16 @@ public slots: void handleDomainChanged(qreal minX, qreal maxX, qreal minY, qreal maxY); void handleGeometryChanged(const QRectF& size); +signals: + void clicked(const QPointF& point); + protected: virtual void setLayout(QVector& points); QPointF calculateGeometryPoint(const QPointF& point) const; QPointF calculateGeometryPoint(int index) const; QPointF calculateDomainPoint(const QPointF& point) const; QVector calculateGeometryPoints() const; + void mousePressEvent( QGraphicsSceneMouseEvent * event ); private: void applyLayout(QVector& points); @@ -50,6 +54,7 @@ private: QVector m_points; friend class XYAnimation; + friend class AreaChartItem; };