diff --git a/examples/examples.pro b/examples/examples.pro index 13b87e5..4aaddc4 100644 --- a/examples/examples.pro +++ b/examples/examples.pro @@ -30,7 +30,8 @@ SUBDIRS += \ donutbreakdown \ scrollchart \ temperaturerecords \ - donutchart + donutchart \ + multiaxis !linux-arm*: { SUBDIRS += \ diff --git a/examples/multiaxis/main.cpp b/examples/multiaxis/main.cpp new file mode 100644 index 0000000..813fc7a --- /dev/null +++ b/examples/multiaxis/main.cpp @@ -0,0 +1,84 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the Qt Commercial Charts Add-on. +** +** $QT_BEGIN_LICENSE$ +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include + +QTCOMMERCIALCHART_USE_NAMESPACE + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + + qsrand(QTime(0,0,0).secsTo(QTime::currentTime())); + + //![1] + QLineSeries* series; + QValueAxis *axisX; + QValueAxis *axisY; + QChart* chart = new QChart(); + for (int i = 0; i < 5; i++) { + series = new QLineSeries; + for (int k(0); k < 8; k++) + series->append(i + k, qrand()%20); + chart->addSeries(series); + + axisX = new QValueAxis; + axisX->setTickCount(7 + i); + axisX->setLinePenColor(series->pen().color()); + if (i%2) + axisX->setAlternativePlacement(true); + axisY = new QValueAxis; + axisY->setTickCount(7 + i); + axisY->setLinePenColor(series->pen().color()); + if (i%2) + axisY->setAlternativePlacement(true); + + chart->setAxisX(axisX, series); + chart->setAxisY(axisY, series); + } + //![2] + + //![3] + chart->legend()->hide(); + + chart->setTitle("Simple line chart example"); + //![3] + + //![4] + QChartView* chartView = new QChartView(chart); + chartView->setRenderHint(QPainter::Antialiasing); + //![4] + + + //![5] + QMainWindow window; + window.setCentralWidget(chartView); + window.resize(800, 600); + window.show(); + //![5] + + return a.exec(); +} diff --git a/examples/multiaxis/multiaxis.pro b/examples/multiaxis/multiaxis.pro new file mode 100644 index 0000000..33de57c --- /dev/null +++ b/examples/multiaxis/multiaxis.pro @@ -0,0 +1,5 @@ +!include( ../examples.pri ) { + error( "Couldn't find the examples.pri file!" ) +} +TARGET = multiaxis +SOURCES += main.cpp diff --git a/src/axis/chartaxis.cpp b/src/axis/chartaxis.cpp index 7018ac6..bdf9b16 100644 --- a/src/axis/chartaxis.cpp +++ b/src/axis/chartaxis.cpp @@ -399,6 +399,11 @@ void ChartAxis::setGeometry(const QRectF &rect) } +void ChartAxis::setInternalRect(const QRectF &size) +{ + m_internalRect = size; +} + void ChartAxis::axisSelected() { //TODO: axis clicked; @@ -441,6 +446,11 @@ Qt::Orientation ChartAxis::orientation() const return m_chartAxis->orientation(); } +bool ChartAxis::alternativePlacement() const +{ + return m_chartAxis->alternativePlacement(); +} + bool ChartAxis::isVisible() { return m_chartAxis->isVisible(); diff --git a/src/axis/chartaxis_p.h b/src/axis/chartaxis_p.h index acfc127..c88c695 100644 --- a/src/axis/chartaxis_p.h +++ b/src/axis/chartaxis_p.h @@ -96,6 +96,7 @@ public: ChartAnimation* animation() const { return m_animation; }; Qt::Orientation orientation() const; + bool alternativePlacement() const; bool isVisible(); void hide(); @@ -103,6 +104,8 @@ public: void setGeometry(const QRectF &size); QRectF geometry() const { return m_rect; } + void setInternalRect(const QRectF &size); + virtual QSizeF sizeHint(Qt::SizeHint which, const QSizeF& constraint = QSizeF()) const; protected: @@ -128,6 +131,7 @@ protected: int m_labelsAngle; //TODO: to be removed QRectF m_rect; + QRectF m_internalRect; QScopedPointer m_grid; QScopedPointer m_shades; QScopedPointer m_labels; diff --git a/src/axis/qabstractaxis.cpp b/src/axis/qabstractaxis.cpp index b098af6..e613322 100644 --- a/src/axis/qabstractaxis.cpp +++ b/src/axis/qabstractaxis.cpp @@ -693,13 +693,23 @@ Qt::Orientation QAbstractAxis::orientation() return d_ptr->m_orientation; } +bool QAbstractAxis::alternativePlacement() const +{ + return d_ptr->m_alternativePlacement; +} + +void QAbstractAxis::setAlternativePlacement(bool placement) +{ + d_ptr->m_alternativePlacement = placement; +} + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// QAbstractAxisPrivate::QAbstractAxisPrivate(QAbstractAxis* q): q_ptr(q), m_orientation(Qt::Orientation(0)), m_dataset(0), - m_visible(false), + m_visible(true), m_arrowVisible(true), m_gridLineVisible(true), m_labelsVisible(true), @@ -707,7 +717,8 @@ QAbstractAxisPrivate::QAbstractAxisPrivate(QAbstractAxis* q): m_shadesVisible(false), m_shadesBrush(Qt::SolidPattern), m_shadesOpacity(1.0), - m_dirty(false) + m_dirty(false), + m_alternativePlacement(false) { } diff --git a/src/axis/qabstractaxis.h b/src/axis/qabstractaxis.h index ea729c4..fe166c9 100644 --- a/src/axis/qabstractaxis.h +++ b/src/axis/qabstractaxis.h @@ -32,8 +32,8 @@ class QAbstractAxisPrivate; class QTCOMMERCIALCHART_EXPORT QAbstractAxis : public QObject { - Q_OBJECT - Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged) + Q_OBJECT + Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged) Q_PROPERTY(bool lineVisible READ isLineVisible WRITE setLineVisible NOTIFY lineVisibleChanged) Q_PROPERTY(QColor color READ linePenColor WRITE setLinePenColor NOTIFY colorChanged) Q_PROPERTY(bool labelsVisible READ labelsVisible WRITE setLabelsVisible NOTIFY labelsVisibleChanged) @@ -124,6 +124,8 @@ public: QColor shadesBorderColor() const; Qt::Orientation orientation(); + bool alternativePlacement() const; + void setAlternativePlacement(bool placement); //range handling void setMin(const QVariant &min); @@ -145,7 +147,7 @@ Q_SIGNALS: void shadesBorderColorChanged(QColor color); protected: - QScopedPointer d_ptr; + QScopedPointer d_ptr; Q_DISABLE_COPY(QAbstractAxis) friend class ChartDataSet; friend class ChartAxis; diff --git a/src/axis/qabstractaxis_p.h b/src/axis/qabstractaxis_p.h index b8df5e9..7935c12 100644 --- a/src/axis/qabstractaxis_p.h +++ b/src/axis/qabstractaxis_p.h @@ -107,6 +107,8 @@ private: bool m_dirty; + bool m_alternativePlacement; + friend class QAbstractAxis; friend class ChartDataSet; }; diff --git a/src/axis/valueaxis/chartvalueaxisx.cpp b/src/axis/valueaxis/chartvalueaxisx.cpp index 040b388..fe2a916 100644 --- a/src/axis/valueaxis/chartvalueaxisx.cpp +++ b/src/axis/valueaxis/chartvalueaxisx.cpp @@ -32,7 +32,7 @@ static int label_padding = 5; QTCOMMERCIALCHART_BEGIN_NAMESPACE ChartValueAxisX::ChartValueAxisX(QAbstractAxis *axis,ChartPresenter *presenter) : ChartAxis(axis,presenter), -m_tickCount(0) + m_tickCount(0) { } @@ -76,35 +76,47 @@ void ChartValueAxisX::updateGeometry() QRectF chartRrect = presenter()->chartsGeometry(); QGraphicsLineItem *lineItem = static_cast(axis.at(0)); - lineItem->setLine(chartRrect.left(), chartRrect.bottom(), chartRrect.right(), chartRrect.bottom()); + // lineItem->setLine(chartRrect.left(), chartRrect.bottom(), chartRrect.right(), chartRrect.bottom()); + if (m_chartAxis->alternativePlacement()) + lineItem->setLine(chartRrect.left(), m_internalRect.top(), chartRrect.right(), m_internalRect.top()); + else + lineItem->setLine(chartRrect.left(), m_internalRect.bottom(), chartRrect.right(), m_internalRect.bottom()); qreal width = 0; for (int i = 0; i < layout.size(); ++i) { QGraphicsLineItem *lineItem = static_cast(lines.at(i)); lineItem->setLine(layout[i], chartRrect.top(), layout[i], chartRrect.bottom()); QGraphicsSimpleTextItem *labelItem = static_cast(labels.at(i)); - labelItem->setText(ticksList.at(i)); - const QRectF& rect = labelItem->boundingRect(); - QPointF center = rect.center(); - labelItem->setTransformOriginPoint(center.x(), center.y()); - labelItem->setPos(layout[i] - center.x(), chartRrect.bottom() + label_padding); - if(labelItem->pos().x() <= width || - labelItem->pos().x() < m_rect.left() || - labelItem->pos().x() + rect.width() > m_rect.right()){ - labelItem->setVisible(false); - lineItem->setVisible(false); - }else{ - labelItem->setVisible(true); - lineItem->setVisible(true); - width=rect.width()+labelItem->pos().x(); - } + labelItem->setText(ticksList.at(i)); + const QRectF& rect = labelItem->boundingRect(); + QPointF center = rect.center(); + labelItem->setTransformOriginPoint(center.x(), center.y()); + // labelItem->setPos(layout[i] - center.x(), chartRrect.bottom() + label_padding); + if (m_chartAxis->alternativePlacement()) + labelItem->setPos(layout[i] - center.x(), m_internalRect.top() - rect.height() - label_padding); + else + labelItem->setPos(layout[i] - center.x(), m_internalRect.bottom() + label_padding); + if(labelItem->pos().x() <= width || + labelItem->pos().x() < m_rect.left() || + labelItem->pos().x() + rect.width() > m_rect.right()){ + labelItem->setVisible(false); + lineItem->setVisible(false); + }else{ + labelItem->setVisible(true); + lineItem->setVisible(true); + width=rect.width()+labelItem->pos().x(); + } if ((i+1)%2 && i>1) { QGraphicsRectItem *rectItem = static_cast(shades.at(i/2-1)); rectItem->setRect(layout[i-1],chartRrect.top(),layout[i]-layout[i-1],chartRrect.height()); } lineItem = static_cast(axis.at(i+1)); - lineItem->setLine(layout[i],chartRrect.bottom(),layout[i],chartRrect.bottom()+5); + // lineItem->setLine(layout[i],chartRrect.bottom(),layout[i],chartRrect.bottom()+5); + if (m_chartAxis->alternativePlacement()) + lineItem->setLine(layout[i],m_internalRect.top(),layout[i],m_internalRect.top()-5); + else + lineItem->setLine(layout[i],m_internalRect.bottom(),layout[i],m_internalRect.bottom()+5); } } @@ -128,33 +140,33 @@ QSizeF ChartValueAxisX::sizeHint(Qt::SizeHint which, const QSizeF& constraint) c qreal width=0; qreal height=0; - switch (which) { - case Qt::MinimumSize:{ - int count = qMax(ticksList.last().count(),ticksList.first().count()); - width=fn.averageCharWidth()*count; - height=fn.height()+label_padding; - width=qMax(width,base.width()); - height+=base.height(); - sh = QSizeF(width,height); - break; - } - case Qt::PreferredSize:{ - for (int i = 0; i < ticksList.size(); ++i) - { - width+=fn.averageCharWidth()*ticksList.at(i).count(); - - } - height=fn.height()+label_padding; - width=qMax(width,base.width()); - height+=base.height(); - sh = QSizeF(width,height); - break; + switch (which) { + case Qt::MinimumSize:{ + int count = qMax(ticksList.last().count(),ticksList.first().count()); + width=fn.averageCharWidth()*count; + height=fn.height()+label_padding; + width=qMax(width,base.width()); + height+=base.height(); + sh = QSizeF(width,height); + break; + } + case Qt::PreferredSize:{ + for (int i = 0; i < ticksList.size(); ++i) + { + width+=fn.averageCharWidth()*ticksList.at(i).count(); + } - default: - break; - } + height=fn.height()+label_padding; + width=qMax(width,base.width()); + height+=base.height(); + sh = QSizeF(width,height); + break; + } + default: + break; + } - return sh; + return sh; } QTCOMMERCIALCHART_END_NAMESPACE diff --git a/src/axis/valueaxis/chartvalueaxisy.cpp b/src/axis/valueaxis/chartvalueaxisy.cpp index 5199b67..bf78459 100644 --- a/src/axis/valueaxis/chartvalueaxisy.cpp +++ b/src/axis/valueaxis/chartvalueaxisy.cpp @@ -32,7 +32,7 @@ static int label_padding = 5; QTCOMMERCIALCHART_BEGIN_NAMESPACE ChartValueAxisY::ChartValueAxisY(QAbstractAxis *axis,ChartPresenter *presenter) : ChartAxis(axis,presenter), -m_tickCount(0) + m_tickCount(0) { } @@ -79,7 +79,11 @@ void ChartValueAxisY::updateGeometry() qreal height = m_rect.bottom(); QGraphicsLineItem *lineItem = static_cast(axis.at(0)); - lineItem->setLine( chartRect.left() , chartRect.top(), chartRect.left(), chartRect.bottom()); + // lineItem->setLine( chartRect.left() , chartRect.top(), chartRect.left(), chartRect.bottom()); + if (m_chartAxis->alternativePlacement()) + lineItem->setLine( m_internalRect.right() , chartRect.top(), m_internalRect.right(), chartRect.bottom()); + else + lineItem->setLine( m_internalRect.left() , chartRect.top(), m_internalRect.left(), chartRect.bottom()); QFontMetrics fn(m_font); @@ -88,40 +92,48 @@ void ChartValueAxisY::updateGeometry() lineItem->setLine( chartRect.left() , layout[i], chartRect.right(), layout[i]); QGraphicsSimpleTextItem *labelItem = static_cast(labels.at(i)); - QString text = ticksList.at(i); + QString text = ticksList.at(i); - if (fn.boundingRect(text).width() > chartRect.left() - m_rect.left() - label_padding ) - { - QString label = text + "..."; - while (fn.boundingRect(label).width() > chartRect.left() - m_rect.left() - label_padding && label.length() > 3) - label.remove(label.length() - 4, 1); - labelItem->setText(label); - }else{ - labelItem->setText(text); - } + if (fn.boundingRect(text).width() > chartRect.left() - m_rect.left() - label_padding ) + { + QString label = text + "..."; + while (fn.boundingRect(label).width() > chartRect.left() - m_rect.left() - label_padding && label.length() > 3) + label.remove(label.length() - 4, 1); + labelItem->setText(label); + }else{ + labelItem->setText(text); + } - const QRectF& rect = labelItem->boundingRect(); + const QRectF& rect = labelItem->boundingRect(); - QPointF center = rect.center(); - labelItem->setTransformOriginPoint(center.x(), center.y()); - labelItem->setPos( chartRect.left() - rect.width() - label_padding , layout[i]-center.y()); + QPointF center = rect.center(); + labelItem->setTransformOriginPoint(center.x(), center.y()); + // labelItem->setPos( chartRect.left() - rect.width() - label_padding , layout[i]-center.y()); + if (m_chartAxis->alternativePlacement()) + labelItem->setPos( m_internalRect.right() + label_padding , layout[i]-center.y()); + else + labelItem->setPos( m_internalRect.left() - rect.width() - label_padding , layout[i]-center.y()); - if(labelItem->pos().y() + rect.height() > height || + if(labelItem->pos().y() + rect.height() > height || labelItem->pos().y() < m_rect.top()) { - labelItem->setVisible(false); - lineItem->setVisible(false); - }else{ - labelItem->setVisible(true); - lineItem->setVisible(true); - height=labelItem->pos().y(); - } + labelItem->setVisible(false); + lineItem->setVisible(false); + }else{ + labelItem->setVisible(true); + lineItem->setVisible(true); + height=labelItem->pos().y(); + } if ((i+1)%2 && i>1) { QGraphicsRectItem *rectItem = static_cast(shades.at(i/2-1)); rectItem->setRect( chartRect.left(),layout[i], chartRect.width(),layout[i-1]-layout[i]); } lineItem = static_cast(axis.at(i+1)); - lineItem->setLine( chartRect.left()-5,layout[i], chartRect.left(),layout[i]); + // lineItem->setLine( chartRect.left()-5,layout[i], chartRect.left(),layout[i]); + if (m_chartAxis->alternativePlacement()) + lineItem->setLine( m_internalRect.right()+5,layout[i], m_internalRect.right(),layout[i]); + else + lineItem->setLine( m_internalRect.left()-5,layout[i], m_internalRect.left(),layout[i]); } } @@ -145,28 +157,28 @@ QSizeF ChartValueAxisY::sizeHint(Qt::SizeHint which, const QSizeF& constraint) c qreal height=0; switch (which) { - case Qt::MinimumSize: { - int count = qMax(ticksList.first().count() , ticksList.last().count()); - width=fn.averageCharWidth()*count+label_padding; - height=fn.height(); - height=qMax(height,base.height()); - width+=base.width(); - sh = QSizeF(width,height); - break; - } - case Qt::PreferredSize: + case Qt::MinimumSize: { + int count = qMax(ticksList.first().count() , ticksList.last().count()); + width=fn.averageCharWidth()*count+label_padding; + height=fn.height(); + height=qMax(height,base.height()); + width+=base.width(); + sh = QSizeF(width,height); + break; + } + case Qt::PreferredSize: + { + for (int i = 0; i < ticksList.size(); ++i) { - for (int i = 0; i < ticksList.size(); ++i) - { - width=qMax(qreal(fn.averageCharWidth()*ticksList.at(i).count())+label_padding,width); - height+=fn.height(); - } - height=qMax(height,base.height()); - width+=base.width(); - sh = QSizeF(width,height); - break; + width=qMax(qreal(fn.averageCharWidth()*ticksList.at(i).count())+label_padding,width); + height+=fn.height(); } - default: + height=qMax(height,base.height()); + width+=base.width(); + sh = QSizeF(width,height); + break; + } + default: break; } return sh; diff --git a/src/chartlayout.cpp b/src/chartlayout.cpp index d508588..cfef1e8 100644 --- a/src/chartlayout.cpp +++ b/src/chartlayout.cpp @@ -31,9 +31,9 @@ QTCOMMERCIALCHART_BEGIN_NAMESPACE static const qreal golden_ratio = 0.25; ChartLayout::ChartLayout(ChartPresenter* presenter): -m_presenter(presenter), -m_margins(20,20,20,20), -m_minChartRect(0,0,200,200) + m_presenter(presenter), + m_margins(20,20,20,20), + m_minChartRect(0,0,200,200) { } @@ -87,7 +87,7 @@ void ChartLayout::setGeometry(const QRectF& rect) QRectF ChartLayout::calculateContentGeometry(const QRectF& geometry) const { - return geometry.adjusted(m_margins.left(),m_margins.top(),-m_margins.right(),-m_margins.bottom()); + return geometry.adjusted(m_margins.left(),m_margins.top(),-m_margins.right(),-m_margins.bottom()); } QRectF ChartLayout::calculateContentMinimum(const QRectF& minimum) const @@ -118,13 +118,26 @@ QRectF ChartLayout::calculateChartGeometry(const QRectF& geometry, const QListorientation()==Qt::Vertical && axis->isVisible()) { vertical = vertical.expandedTo(axis->effectiveSizeHint(Qt::MinimumSize)); + if (axis->alternativePlacement()) + rightAxisCount++; + else + leftAxisCount++; } else if(axis->orientation()==Qt::Horizontal && axis->isVisible()) { horizontal = horizontal.expandedTo(axis->effectiveSizeHint(Qt::MinimumSize)); + if (axis->alternativePlacement()) + topAxisCount++; + else + bottomAxisCount++; } } @@ -133,10 +146,37 @@ QRectF ChartLayout::calculateChartGeometry(const QRectF& geometry, const QListsetChartsGeometry(rect); + leftAxisCount = 0; + rightAxisCount = 0; + bottomAxisCount = 0; + topAxisCount = 0; + + // adjust the axes internal and external rects foreach(ChartAxis* axis , axes) { - axis->setGeometry(geometry); + if(axis->orientation()==Qt::Vertical) { + axis->setInternalRect(rect.adjusted(-leftAxisCount * axisWidth, 0, rightAxisCount * axisWidth, 0)); + axis->setGeometry(rect.adjusted(-(leftAxisCount + 1) * axisWidth, 0, (rightAxisCount + 1) * axisWidth, 0)); + if (axis->alternativePlacement()) + rightAxisCount++; + else + leftAxisCount++; + } + else if(axis->orientation()==Qt::Horizontal) { + axis->setInternalRect(rect.adjusted(0, -topAxisCount * axisWidth, 0, bottomAxisCount * axisWidth)); + axis->setGeometry(rect.adjusted(0, -(topAxisCount + 1) * axisWidth, 0, (bottomAxisCount + 1) * axisWidth)); + if (axis->alternativePlacement()) + topAxisCount++; + else + bottomAxisCount++; + } } return rect; @@ -165,34 +205,33 @@ QRectF ChartLayout::calculateLegendGeometry(const QRectF& geometry,QLegend* lege QRectF result; switch (legend->alignment()) { - - case Qt::AlignTop: { - legendRect = QRectF(geometry.topLeft(),QSizeF(geometry.width(),size.height())); - result = geometry.adjusted(0,legendRect.height(),0,0); - break; - } - case Qt::AlignBottom: { - legendRect = QRectF(QPointF(geometry.left(),geometry.bottom()-size.height()),QSizeF(geometry.width(),size.height())); - result = geometry.adjusted(0,0,0,-legendRect.height()); - break; - } - case Qt::AlignLeft: { - qreal width = qMin(size.width(),geometry.width()*golden_ratio); - legendRect = QRectF(geometry.topLeft(),QSizeF(width,geometry.height())); - result = geometry.adjusted(width,0,0,0); - break; - } - case Qt::AlignRight: { - qreal width = qMin(size.width(),geometry.width()*golden_ratio); - legendRect = QRectF(QPointF(geometry.right()-width,geometry.top()),QSizeF(width,geometry.height())); - result = geometry.adjusted(0,0,-width,0); - break; - } - default: { - legendRect = QRectF(0,0,0,0); - result = geometry; - break; - } + case Qt::AlignTop: { + legendRect = QRectF(geometry.topLeft(),QSizeF(geometry.width(),size.height())); + result = geometry.adjusted(0,legendRect.height(),0,0); + break; + } + case Qt::AlignBottom: { + legendRect = QRectF(QPointF(geometry.left(),geometry.bottom()-size.height()),QSizeF(geometry.width(),size.height())); + result = geometry.adjusted(0,0,0,-legendRect.height()); + break; + } + case Qt::AlignLeft: { + qreal width = qMin(size.width(),geometry.width()*golden_ratio); + legendRect = QRectF(geometry.topLeft(),QSizeF(width,geometry.height())); + result = geometry.adjusted(width,0,0,0); + break; + } + case Qt::AlignRight: { + qreal width = qMin(size.width(),geometry.width()*golden_ratio); + legendRect = QRectF(QPointF(geometry.right()-width,geometry.top()),QSizeF(width,geometry.height())); + result = geometry.adjusted(0,0,-width,0); + break; + } + default: { + legendRect = QRectF(0,0,0,0); + result = geometry; + break; + } } legend->setGeometry(legendRect); @@ -202,22 +241,22 @@ QRectF ChartLayout::calculateLegendGeometry(const QRectF& geometry,QLegend* lege QRectF ChartLayout::calculateLegendMinimum(const QRectF& geometry,QLegend* legend) const { - QSizeF minSize = legend->effectiveSizeHint(Qt::MinimumSize,QSizeF(-1,-1)); - return geometry.adjusted(0,0,minSize.width(),minSize.height()); + QSizeF minSize = legend->effectiveSizeHint(Qt::MinimumSize,QSizeF(-1,-1)); + return geometry.adjusted(0,0,minSize.width(),minSize.height()); } QRectF ChartLayout::calculateTitleGeometry(const QRectF& geometry,ChartTitle* title) const { - title->setGeometry(geometry); - QPointF center = geometry.center() - title->boundingRect().center(); - title->setPos(center.x(),title->pos().y()); - return geometry.adjusted(0,title->boundingRect().height(),0,0); + title->setGeometry(geometry); + QPointF center = geometry.center() - title->boundingRect().center(); + title->setPos(center.x(),title->pos().y()); + return geometry.adjusted(0,title->boundingRect().height(),0,0); } QRectF ChartLayout::calculateTitleMinimum(const QRectF& minimum,ChartTitle* title) const { - QSizeF min = title->sizeHint(Qt::MinimumSize); - return minimum.adjusted(0,0,min.width(),min.height()); + QSizeF min = title->sizeHint(Qt::MinimumSize); + return minimum.adjusted(0,0,min.width(),min.height()); } QSizeF ChartLayout::sizeHint ( Qt::SizeHint which, const QSizeF & constraint) const diff --git a/src/chartpresenter.cpp b/src/chartpresenter.cpp index 4e51b84..3a42ed9 100644 --- a/src/chartpresenter.cpp +++ b/src/chartpresenter.cpp @@ -135,26 +135,27 @@ void ChartPresenter::selectVisibleAxis() while (i.hasNext()) { i.next(); - i.key()->hide(); +// i.key()->hide(); + i.key()->show(); } - i.toFront(); +// i.toFront(); - bool axisX=false; - bool axisY=false; +// bool axisX=false; +// bool axisY=false; - while (i.hasNext()) { - i.next(); - if(i.key()->orientation()==Qt::Vertical && !axisY) { - axisY=true; - i.key()->show(); - } - if(i.key()->orientation()==Qt::Horizontal && !axisX) { - axisX=true; - i.key()->show(); - } +// while (i.hasNext()) { +// i.next(); +// if(i.key()->orientation()==Qt::Vertical && !axisY) { +// axisY=true; +// i.key()->show(); +// } +// if(i.key()->orientation()==Qt::Horizontal && !axisX) { +// axisX=true; +// i.key()->show(); +// } - } +// } }