diff --git a/src/legendmarker.cpp b/src/legendmarker.cpp index 078d49e..786b38b 100644 --- a/src/legendmarker.cpp +++ b/src/legendmarker.cpp @@ -8,11 +8,12 @@ QTCOMMERCIALCHART_BEGIN_NAMESPACE LegendMarker::LegendMarker(QSeries* series, QGraphicsItem *parent) : QGraphicsObject(parent) ,mBoundingRect(0,0,1,1) - ,mName("") + ,mMarkerBoundingRect(0,0,1,1) ,mSeries(series) ,mBarset(0) ,mPieslice(0) ,mType(LegendMarkerTypeSeries) + ,mTextItem(new QGraphicsSimpleTextItem(this)) { setAcceptedMouseButtons(Qt::LeftButton|Qt::RightButton); } @@ -20,11 +21,12 @@ LegendMarker::LegendMarker(QSeries* series, QGraphicsItem *parent) LegendMarker::LegendMarker(QSeries *series, QBarSet *barset, QGraphicsItem *parent) : QGraphicsObject(parent) ,mBoundingRect(0,0,1,1) - ,mName("") + ,mMarkerBoundingRect(0,0,1,1) ,mSeries(series) ,mBarset(barset) ,mPieslice(0) ,mType(LegendMarkerTypeBarset) + ,mTextItem(new QGraphicsSimpleTextItem(this)) { setAcceptedMouseButtons(Qt::LeftButton|Qt::RightButton); } @@ -32,11 +34,12 @@ LegendMarker::LegendMarker(QSeries *series, QBarSet *barset, QGraphicsItem *pare LegendMarker::LegendMarker(QSeries *series, QPieSlice *pieslice, QGraphicsItem *parent) : QGraphicsObject(parent) ,mBoundingRect(0,0,1,1) - ,mName("") + ,mMarkerBoundingRect(0,0,1,1) ,mSeries(series) ,mBarset(0) ,mPieslice(pieslice) ,mType(LegendMarkerTypePieslice) + ,mTextItem(new QGraphicsSimpleTextItem(this)) { setAcceptedMouseButtons(Qt::LeftButton|Qt::RightButton); } @@ -44,6 +47,15 @@ LegendMarker::LegendMarker(QSeries *series, QPieSlice *pieslice, QGraphicsItem * void LegendMarker::setBoundingRect(const QRectF rect) { mBoundingRect = rect; + // Calculate Marker pos + + // TODO: remove hard coding. 5 is marigin around marker + QSizeF markerSize(10,10); + qreal x = mBoundingRect.x() + 5; + qreal y = mBoundingRect.y() + (mBoundingRect.height() - markerSize.height())/2; + mMarkerBoundingRect = QRectF(x,y,markerSize.width(),markerSize.height()); + + mTextItem.setPos(mBoundingRect.x() + markerSize.width() + 10, y ); } void LegendMarker::setBrush(const QBrush brush) @@ -58,12 +70,12 @@ QBrush LegendMarker::brush() const void LegendMarker::setName(const QString name) { - mName = name; + mTextItem.setText(name); } QString LegendMarker::name() const { - return mName; + return mTextItem.text(); } QSeries* LegendMarker::series() const @@ -74,7 +86,7 @@ QSeries* LegendMarker::series() const void LegendMarker::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { painter->setBrush(mBrush); - painter->drawRect(mBoundingRect); + painter->drawRect(mMarkerBoundingRect); } QRectF LegendMarker::boundingRect() const diff --git a/src/legendmarker_p.h b/src/legendmarker_p.h index 624d6e7..b39dc5a 100644 --- a/src/legendmarker_p.h +++ b/src/legendmarker_p.h @@ -51,13 +51,15 @@ Q_SIGNALS: private: QRectF mBoundingRect; + QRectF mMarkerBoundingRect; QBrush mBrush; - QString mName; QSeries* mSeries; QBarSet* mBarset; QPieSlice* mPieslice; LegendMarkerType mType; + QGraphicsSimpleTextItem mTextItem; + }; QTCOMMERCIALCHART_END_NAMESPACE diff --git a/src/qchart.cpp b/src/qchart.cpp index 45dd3c2..bc1608f 100644 --- a/src/qchart.cpp +++ b/src/qchart.cpp @@ -344,11 +344,10 @@ void QChart::updateLayout() // TODO: better layout if (m_legend) { QRectF boundingRect(m_rect.adjusted(margin(), - rect.height() + margin() + margin()/2 - m_legend->minimumSize().height()/2, + rect.height() + margin() + margin()/2, -margin(), - -margin()/2 + m_legend->minimumSize().height()/2)); + -margin()/2 + m_legend->minimumSize().height())); m_legend->handleGeometryChanged(boundingRect); - qDebug() << "legend rect:" << m_legend->boundingRect(); } } #include "moc_qchart.cpp" diff --git a/src/qlegend.cpp b/src/qlegend.cpp index 57ebd2d..0faef37 100644 --- a/src/qlegend.cpp +++ b/src/qlegend.cpp @@ -32,12 +32,6 @@ void QLegend::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, Q { painter->setBrush(mBackgroundBrush); painter->drawRect(mBoundingRect); - - foreach(LegendMarker* m, mMarkers) { - QRectF r = m->boundingRect(); - painter->setBrush(m->brush()); - painter->drawText(r.x() + r.width()*2, r.y() + r.height(), m->name()); - } } QRectF QLegend::boundingRect() const @@ -211,19 +205,12 @@ void QLegend::layoutChanged() return; } - // TODO: marker defined by series. - QSizeF markerSize(10,10); - - // TODO: better layout, this is just concept. - // Leave some space around markers like this: | x x x x | qreal steps = mMarkers.count(); - qreal xStep = mBoundingRect.width() / steps; - qreal yStep = mBoundingRect.height() / steps; - qreal x = mBoundingRect.x() + 5; - qreal y = mBoundingRect.y() + (mBoundingRect.height() - markerSize.height())/2; + qreal x=mBoundingRect.x(); + qreal y = mBoundingRect.y() + (mBoundingRect.height()/4); foreach (LegendMarker* m, mMarkers) { - m->setBoundingRect(QRectF(x,y,markerSize.width(),markerSize.height())); + m->setBoundingRect(QRectF(x,y,xStep,mBoundingRect.height()/2)); x += xStep; } }