diff --git a/examples/stackedbarchartdrilldown/main.cpp b/examples/stackedbarchartdrilldown/main.cpp index fb7c185..31b0f4f 100644 --- a/examples/stackedbarchartdrilldown/main.cpp +++ b/examples/stackedbarchartdrilldown/main.cpp @@ -55,7 +55,6 @@ public: public Q_SLOTS: void handleRightClick(QBarSet *barset, QString category) { -// qDebug() << "DrilldownChart::handleRightClick" << barset->name() << category; DrilldownBarSeries* series = static_cast (sender()); changeSeries(series->drilldownSeries(category)); } @@ -140,9 +139,6 @@ int main(int argc, char *argv[]) drilldownChart->axisX()->setGridLineVisible(false); - QLegend* l = drilldownChart->legend(); - l->handleGeometryChanged(QRectF(50,270,300,20)); - window.setCentralWidget(drilldownChart); window.resize(400, 300); window.show(); diff --git a/src/qchart.cpp b/src/qchart.cpp index d360d38..eefcf19 100644 --- a/src/qchart.cpp +++ b/src/qchart.cpp @@ -338,6 +338,17 @@ void QChart::updateLayout() if (m_backgroundItem) { m_backgroundItem->setRect(rect); } + + // recalculate legend position + // TODO: better layout + if (m_legend) { + QRectF boundingRect(m_rect.adjusted(margin(), + rect.height() + margin() + margin()/2 - m_legend->minimumSize().height()/2, + -margin(), + -margin()/2 + m_legend->minimumSize().height()/2)); + 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 ae5c25d..57ebd2d 100644 --- a/src/qlegend.cpp +++ b/src/qlegend.cpp @@ -24,6 +24,7 @@ QLegend::QLegend(QGraphicsItem *parent) : QGraphicsObject(parent) ,mBoundingRect(0,0,1,1) ,mBackgroundBrush(Qt::darkGray) // TODO: from theme? + ,mMinimumSize(50,20) // TODO: magic numbers { } @@ -54,6 +55,16 @@ QBrush QLegend::backgroundBrush() const return mBackgroundBrush; } +QSizeF QLegend::minimumSize() const +{ + return mMinimumSize; +} + +void QLegend::setMinimumSize(const QSizeF size) +{ + mMinimumSize = size; +} + void QLegend::handleSeriesAdded(QSeries* series,Domain* domain) { mSeriesList.append(series); diff --git a/src/qlegend.h b/src/qlegend.h index a3f7286..83e64a1 100644 --- a/src/qlegend.h +++ b/src/qlegend.h @@ -28,6 +28,9 @@ public: void setBackgroundBrush(const QBrush& brush); QBrush backgroundBrush() const; + QSizeF minimumSize() const; + void setMinimumSize(const QSizeF size); + signals: // for interactions. void clicked(QSeries* series, Qt::MouseButton button); @@ -54,6 +57,7 @@ private: QList mMarkers; QBrush mBackgroundBrush; + QSizeF mMinimumSize; }; QTCOMMERCIALCHART_END_NAMESPACE diff --git a/src/qseries.h b/src/qseries.h index 30da188..46a5e31 100644 --- a/src/qseries.h +++ b/src/qseries.h @@ -41,6 +41,7 @@ public: // TODO virtual bool setModel(QAbstractItemModel* /*model*/) { return false; } + // TODO: consider this virtual QList legendEntries() { QList l; return l; } void setTitle(QString title) { m_title = title; }