diff --git a/examples/stackedbarchart/main.cpp b/examples/stackedbarchart/main.cpp index 8f5b5a9..3d16107 100644 --- a/examples/stackedbarchart/main.cpp +++ b/examples/stackedbarchart/main.cpp @@ -67,6 +67,9 @@ int main(int argc, char *argv[]) QCategoriesAxis* axis = new QCategoriesAxis(); axis->append(categories); chart->setAxisX(series,axis); +// axis->setMinCategory(QString("Feb")); +// axis->setMaxCategory(QString("May")); +// axis->setRange(QString("Feb"), QString("Apr")); //![4] //![5] diff --git a/src/axis/qcategoriesaxis.cpp b/src/axis/qcategoriesaxis.cpp index 6a1cc98..6a7afc5 100644 --- a/src/axis/qcategoriesaxis.cpp +++ b/src/axis/qcategoriesaxis.cpp @@ -22,6 +22,7 @@ #include "qcategoriesaxis_p.h" #include "chartcategoriesaxisx_p.h" #include "chartcategoriesaxisy_p.h" +#include QTCOMMERCIALCHART_BEGIN_NAMESPACE @@ -195,7 +196,12 @@ void QCategoriesAxisPrivate::setMinCategory(const QString& minCategory) if (minIndex == -1) { return; } - setRange(minIndex,m_max); + + int maxIndex = m_max; + if (minIndex > maxIndex) { + maxIndex = m_categories.count()-1; + } + setRange(minIndex - 0.5, maxIndex + 0.5); } void QCategoriesAxisPrivate::setMaxCategory(const QString& maxCategory) @@ -205,7 +211,10 @@ void QCategoriesAxisPrivate::setMaxCategory(const QString& maxCategory) if (maxIndex == -1) { return; } - setRange(m_min,maxIndex); + if (maxIndex < m_min) { + m_min = 0; + } + setRange(m_min - 0.5, maxIndex + 0.5); } void QCategoriesAxisPrivate::setRangeCategory(const QString& minCategory, const QString& maxCategory) @@ -219,7 +228,7 @@ void QCategoriesAxisPrivate::setRangeCategory(const QString& minCategory, const if (maxIndex == -1) { return; } - setRange(minIndex,maxIndex); + setRange(minIndex -0.5, maxIndex + 0.5); } void QCategoriesAxisPrivate::setMin(const qreal min) @@ -234,6 +243,10 @@ void QCategoriesAxisPrivate::setMax(const qreal max) void QCategoriesAxisPrivate::setRange(const qreal min, const qreal max) { + if (max <= min) { + // max must be greater than min + return; + } Q_Q(QCategoriesAxis); bool changed = false; if (!qFuzzyIsNull(m_min - min)) { @@ -247,7 +260,7 @@ void QCategoriesAxisPrivate::setRange(const qreal min, const qreal max) } if (changed) { - emit this->changed(m_min, m_max, m_ticksCount, false); + emit this->changed(m_min, m_max, qCeil(m_max) -qCeil(m_min) +1, false); emit q->categoriesChanged(); } } diff --git a/src/chartdataset.cpp b/src/chartdataset.cpp index 21ced56..dc6cf52 100644 --- a/src/chartdataset.cpp +++ b/src/chartdataset.cpp @@ -234,6 +234,7 @@ void ChartDataSet::setAxisX(QAbstractSeries *series, QAbstractAxis *axis) oldAxis->deleteLater(); } + // TODO: should we take domain from axis (if it has min and max already defined) Domain* domain = m_seriesDomainMap.value(series); Q_ASSERT(domain);