diff --git a/src/axisitem.cpp b/src/axisitem.cpp index 4b255a8..be588f6 100644 --- a/src/axisitem.cpp +++ b/src/axisitem.cpp @@ -43,7 +43,7 @@ void AxisItem::setPlotDomain(const PlotDomain& plotDomain) createItems(); } -void AxisItem::setSize(const QSize &size) +void AxisItem::setSize(const QSizeF &size) { m_rect = QRectF(QPoint(0,0),size); createItems(); diff --git a/src/axisitem_p.h b/src/axisitem_p.h index 0a01670..c0dc844 100644 --- a/src/axisitem_p.h +++ b/src/axisitem_p.h @@ -20,7 +20,7 @@ public: void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget){}; public: // from ChartItem - void setSize(const QSize &size); + void setSize(const QSizeF &size); void setPlotDomain(const PlotDomain& data); public: diff --git a/src/barchart/bar.cpp b/src/barchart/bar.cpp index ed36d0e..374d5a6 100644 --- a/src/barchart/bar.cpp +++ b/src/barchart/bar.cpp @@ -9,7 +9,7 @@ Bar::Bar(QGraphicsItem *parent) { } -void Bar::setSize(const QSize& size) +void Bar::setSize(const QSizeF& size) { mWidth = size.width(); mHeight = size.height(); diff --git a/src/barchart/bar.h b/src/barchart/bar.h index 7a8e956..323cb4e 100644 --- a/src/barchart/bar.h +++ b/src/barchart/bar.h @@ -14,7 +14,7 @@ public: Bar(QGraphicsItem *parent=0); public: // from ChartItem - void setSize(const QSize &size); + void setSize(const QSizeF &size); void setPlotDomain(const PlotDomain& data); // Layout Stuff diff --git a/src/barchart/bargroup.cpp b/src/barchart/bargroup.cpp index ff270b4..dae8f8c 100644 --- a/src/barchart/bargroup.cpp +++ b/src/barchart/bargroup.cpp @@ -15,7 +15,7 @@ BarGroup::BarGroup(BarChartSeries& series, QGraphicsItem *parent) : dataChanged(); } -void BarGroup::setSize(const QSize& size) +void BarGroup::setSize(const QSizeF& size) { qDebug() << "BarGroup::setSize"; mWidth = size.width(); diff --git a/src/barchart/bargroup.h b/src/barchart/bargroup.h index d509fa1..a30e9b7 100644 --- a/src/barchart/bargroup.h +++ b/src/barchart/bargroup.h @@ -14,7 +14,7 @@ public: explicit BarGroup(BarChartSeries& series, QGraphicsItem *parent = 0); public: // from ChartItem - void setSize(const QSize &size); + void setSize(const QSizeF &size); void setPlotDomain(const PlotDomain& data); // Layout "api" diff --git a/src/barchart/percentbargroup.cpp b/src/barchart/percentbargroup.cpp index f8d8a96..a8739d6 100644 --- a/src/barchart/percentbargroup.cpp +++ b/src/barchart/percentbargroup.cpp @@ -16,7 +16,7 @@ PercentBarGroup::PercentBarGroup(PercentBarChartSeries& series, QGraphicsItem *p } -void PercentBarGroup::setSize(const QSize& size) +void PercentBarGroup::setSize(const QSizeF& size) { // qDebug() << "PercentBarGroup::setSize"; mWidth = size.width(); diff --git a/src/barchart/percentbargroup.h b/src/barchart/percentbargroup.h index 074a4bb..6427d34 100644 --- a/src/barchart/percentbargroup.h +++ b/src/barchart/percentbargroup.h @@ -14,7 +14,7 @@ public: PercentBarGroup(PercentBarChartSeries& series, QGraphicsItem *parent = 0); public: // From ChartItem - void setSize(const QSize &size); + void setSize(const QSizeF &size); void setPlotDomain(const PlotDomain& data); public: diff --git a/src/barchart/stackedbargroup.cpp b/src/barchart/stackedbargroup.cpp index f91978c..c01996a 100644 --- a/src/barchart/stackedbargroup.cpp +++ b/src/barchart/stackedbargroup.cpp @@ -17,7 +17,7 @@ StackedBarGroup::StackedBarGroup(StackedBarChartSeries& series, QGraphicsItem *p } -void StackedBarGroup::setSize(const QSize& size) +void StackedBarGroup::setSize(const QSizeF& size) { // qDebug() << "StackedBarGroup::setSize"; mWidth = size.width(); diff --git a/src/barchart/stackedbargroup.h b/src/barchart/stackedbargroup.h index 6a6d909..c299698 100644 --- a/src/barchart/stackedbargroup.h +++ b/src/barchart/stackedbargroup.h @@ -17,7 +17,7 @@ public: StackedBarGroup(StackedBarChartSeries& series, QGraphicsItem *parent = 0); public: // From ChartItem - void setSize(const QSize &size); + void setSize(const QSizeF &size); void setPlotDomain(const PlotDomain& data); // From ChartThemeObserver diff --git a/src/chartitem_p.h b/src/chartitem_p.h index 88a4fdc..0bfd011 100644 --- a/src/chartitem_p.h +++ b/src/chartitem_p.h @@ -12,7 +12,7 @@ class ChartItem : public QGraphicsItem public: ChartItem(QGraphicsItem* parent = 0):QGraphicsItem(parent){}; virtual ~ChartItem(){}; - virtual void setSize(const QSize &size) = 0; + virtual void setSize(const QSizeF &size) = 0; virtual void setPlotDomain(const PlotDomain& data) = 0; }; diff --git a/src/plotdomain.cpp b/src/plotdomain.cpp index 5e4bc84..b96574e 100644 --- a/src/plotdomain.cpp +++ b/src/plotdomain.cpp @@ -28,7 +28,7 @@ qreal PlotDomain::spanY() const return m_maxY - m_minY; } -PlotDomain PlotDomain::subDomain(const QRect& rect, qreal maxWidth,qreal maxHeight) const +PlotDomain PlotDomain::subDomain(const QRectF& rect, qreal maxWidth,qreal maxHeight) const { PlotDomain domain; diff --git a/src/plotdomain_p.h b/src/plotdomain_p.h index 7681b62..e813dd1 100644 --- a/src/plotdomain_p.h +++ b/src/plotdomain_p.h @@ -13,7 +13,7 @@ public: qreal spanX() const; qreal spanY() const; - PlotDomain subDomain(const QRect& rect, qreal maxWidth, qreal maxHeight) const; + PlotDomain subDomain(const QRectF& rect, qreal maxWidth, qreal maxHeight) const; public: diff --git a/src/qchart.cpp b/src/qchart.cpp index 357bfaf..2394baa 100644 --- a/src/qchart.cpp +++ b/src/qchart.cpp @@ -19,11 +19,12 @@ #include "plotdomain_p.h" #include "axisitem_p.h" #include +#include #include QTCOMMERCIALCHART_BEGIN_NAMESPACE -QChart::QChart(QGraphicsObject* parent) : QGraphicsObject(parent), +QChart::QChart(QGraphicsItem *parent, Qt::WindowFlags wFlags) : QGraphicsWidget(parent,wFlags), m_backgroundItem(0), m_titleItem(0), m_axisXItem(new AxisItem(AxisItem::X_AXIS, this)), @@ -226,36 +227,6 @@ QChartSeries* QChart::createSeries(QChartSeries::QChartSeriesType type) return series; } -void QChart::setSize(const QSize& size) -{ - m_rect = QRect(QPoint(0,0),size); - QRect 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); - if (m_bacgroundOrinetation == HorizonatlGradientOrientation) - m_backgroundGradient.setFinalStop(m_backgroundItem->rect().width(), 0); - else - m_backgroundGradient.setFinalStop(0, m_backgroundItem->rect().height()); - m_backgroundItem->setBrush(m_backgroundGradient); - } - - // resize and reposition childs - foreach (ChartItem *item, m_chartItems) { - item->setPos(rect.topLeft()); - item->setSize(rect.size()); - } - - update(); -} - void QChart::setBackground(const QColor& startColor, const QColor& endColor, GradientOrientation orientation) { @@ -319,14 +290,14 @@ void QChart::setTheme(QChart::ChartThemeId theme) update(); } -void QChart::zoomInToRect(const QRect& rectangle) +void QChart::zoomInToRect(const QRectF& rectangle) { if(!rectangle.isValid()) return; qreal margin = this->margin(); - QRect rect = rectangle.normalized(); + QRectF rect = rectangle.normalized(); rect.translate(-margin, -margin); PlotDomain& oldDomain = m_plotDomainList[m_plotDataIndex]; @@ -350,7 +321,7 @@ void QChart::zoomIn() item->setPlotDomain(m_plotDomainList[m_plotDataIndex]); update(); } else { - QRect rect = m_rect.adjusted(margin(),margin(), -margin(), -margin()); + QRectF rect = m_rect.adjusted(margin(),margin(), -margin(), -margin()); rect.setWidth(rect.width()/2); rect.setHeight(rect.height()/2); rect.moveCenter(m_rect.center()); @@ -397,6 +368,39 @@ void QChart::setAxis(AxisItem *item, const QChartAxis& axis) item->setVisible(axis.isAxisVisible()); } +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); + if (m_bacgroundOrinetation == HorizonatlGradientOrientation) + m_backgroundGradient.setFinalStop(m_backgroundItem->rect().width(), 0); + else + m_backgroundGradient.setFinalStop(0, m_backgroundItem->rect().height()); + m_backgroundItem->setBrush(m_backgroundGradient); + } + + // resize and reposition childs + foreach (ChartItem *item, m_chartItems) { + item->setPos(rect.topLeft()); + item->setSize(rect.size()); + } + + update(); +} + + + #include "moc_qchart.cpp" QTCOMMERCIALCHART_END_NAMESPACE diff --git a/src/qchart.h b/src/qchart.h index 5dbcd76..ec79e11 100644 --- a/src/qchart.h +++ b/src/qchart.h @@ -3,10 +3,12 @@ #include #include -#include +#include #include #include +class QGraphicsSceneResizeEvent; + QTCOMMERCIALCHART_BEGIN_NAMESPACE class AxisItem; @@ -25,7 +27,7 @@ class ChartItem; /*! * TODO: define the responsibilities */ -class QTCOMMERCIALCHART_EXPORT QChart : public QGraphicsObject +class QTCOMMERCIALCHART_EXPORT QChart : public QGraphicsWidget { Q_OBJECT public: @@ -45,7 +47,7 @@ public: }; public: - QChart(QGraphicsObject* parent = 0); + QChart(QGraphicsItem *parent = 0, Qt::WindowFlags wFlags = 0); ~QChart(); //from QGraphicsItem @@ -57,7 +59,6 @@ public: // TODO: who owns the series now? maybe owned by chart and returned a reference instead... QChartSeries* createSeries(QChartSeries::QChartSeriesType type); - void setSize(const QSize& size); void setMargin(int margin); int margin() const; void setTheme(QChart::ChartThemeId theme); @@ -65,7 +66,7 @@ public: void setTitle(const QString& title,const QFont& font = QFont()); void setBackground(const QColor& startColor, const QColor& endColor = Qt::white, GradientOrientation orientation = VerticalGradientOrientation); - void zoomInToRect(const QRect& rectangle); + void zoomInToRect(const QRectF& rectangle); void zoomIn(); void zoomOut(); void zoomReset(); @@ -74,6 +75,9 @@ public: void setAxisY(const QChartAxis& axis); void setAxisY(const QList& axis); +protected: + void resizeEvent(QGraphicsSceneResizeEvent *event); + private: void setAxis(AxisItem *item, const QChartAxis& axis); @@ -85,7 +89,7 @@ private: QGraphicsTextItem* m_titleItem; AxisItem* m_axisXItem; QList m_axisYItem; - QRect m_rect; + QRectF m_rect; QList m_chartSeries; QList m_chartItems; QVector m_plotDomainList; diff --git a/src/qchartview.cpp b/src/qchartview.cpp index 0c2dbaf..426eb7f 100644 --- a/src/qchartview.cpp +++ b/src/qchartview.cpp @@ -28,7 +28,7 @@ QChartView::~QChartView() void QChartView::resizeEvent(QResizeEvent *event) { m_scene->setSceneRect(0,0,size().width(),size().height()); - m_chart->setSize(size()); + m_chart->resize(size()); QWidget::resizeEvent(event); } diff --git a/src/qchartwidget.cpp b/src/qchartwidget.cpp index a3f7dd8..c13ebed 100644 --- a/src/qchartwidget.cpp +++ b/src/qchartwidget.cpp @@ -32,7 +32,7 @@ QChartWidget::~QChartWidget() void QChartWidget::resizeEvent(QResizeEvent *event) { m_scene->setSceneRect(0,0,size().width(),size().height()); - m_chart->setSize(size()); + m_chart->resize(size()); QWidget::resizeEvent(event); } diff --git a/src/qpieseries.cpp b/src/qpieseries.cpp index 33e0df3..357ea6f 100644 --- a/src/qpieseries.cpp +++ b/src/qpieseries.cpp @@ -49,7 +49,7 @@ bool QPieSeriesPrivate::setData(QList data) return true; } -void QPieSeriesPrivate::setSize(const QSize &size) +void QPieSeriesPrivate::setSize(const QSizeF &size) { // TODO: allow user setting the size? // TODO: allow user defining the margins? diff --git a/src/qpieseries_p.h b/src/qpieseries_p.h index da958be..4cdd5f1 100644 --- a/src/qpieseries_p.h +++ b/src/qpieseries_p.h @@ -19,7 +19,7 @@ public: ~QPieSeriesPrivate(); public: // from ChartItem - void setSize(const QSize &size); + void setSize(const QSizeF &size); void setPlotDomain(const PlotDomain& data); // This is a dummy QGraphicsItem; dummy implementation QRectF boundingRect() const { return parentItem()->boundingRect(); } diff --git a/src/qscatterseries.cpp b/src/qscatterseries.cpp index 1300d51..b00367f 100644 --- a/src/qscatterseries.cpp +++ b/src/qscatterseries.cpp @@ -37,7 +37,7 @@ void QScatterSeriesPrivate::changeGeometry() } } -void QScatterSeriesPrivate::setSize(const QSize &size) +void QScatterSeriesPrivate::setSize(const QSizeF &size) { // m_boundingRect = QRectF(pos().x(), pos().y(), size.width(), size.height()); m_boundingRect = QRectF(0, 0, size.width(), size.height()); diff --git a/src/qscatterseries_p.h b/src/qscatterseries_p.h index 0eeee39..99bcaa8 100644 --- a/src/qscatterseries_p.h +++ b/src/qscatterseries_p.h @@ -18,7 +18,7 @@ public: QScatterSeriesPrivate(QGraphicsItem *parent); public: // from ChartObjectInterface - void setSize(const QSize &size); + void setSize(const QSizeF &size); void setPlotDomain(const PlotDomain& data); public: // from ChartThemeObserver diff --git a/src/xylinechart/xylinechartitem.cpp b/src/xylinechart/xylinechartitem.cpp index efdf70d..559a1f3 100644 --- a/src/xylinechart/xylinechartitem.cpp +++ b/src/xylinechart/xylinechartitem.cpp @@ -15,7 +15,7 @@ XYLineChartItem::XYLineChartItem(QXYChartSeries* series,QGraphicsItem *parent) : setFlags(QGraphicsItem::ItemClipsChildrenToShape); } -void XYLineChartItem::setSize(const QSize &size) +void XYLineChartItem::setSize(const QSizeF &size) { m_rect = QRect(0, 0, size.width(), size.height()); prepareGeometryChange(); diff --git a/src/xylinechart/xylinechartitem_p.h b/src/xylinechart/xylinechartitem_p.h index 55cc087..2ecc650 100644 --- a/src/xylinechart/xylinechartitem_p.h +++ b/src/xylinechart/xylinechartitem_p.h @@ -22,7 +22,7 @@ public: // virtual QPainterPath shape() const; public: // from ChartItem - void setSize(const QSize &size); + void setSize(const QSizeF &size); void setPlotDomain(const PlotDomain& data); private: