##// END OF EJS Templates
Fixes customchart, barcategoryaxisy
Michal Klocek -
r1655:f1c3fb22a206
parent child
Show More
@@ -1,122 +1,122
1 1 /****************************************************************************
2 2 **
3 3 ** Copyright (C) 2012 Digia Plc
4 4 ** All rights reserved.
5 5 ** For any questions to Digia, please use contact form at http://qt.digia.com
6 6 **
7 7 ** This file is part of the Qt Commercial Charts Add-on.
8 8 **
9 9 ** $QT_BEGIN_LICENSE$
10 10 ** Licensees holding valid Qt Commercial licenses may use this file in
11 11 ** accordance with the Qt Commercial License Agreement provided with the
12 12 ** Software or, alternatively, in accordance with the terms contained in
13 13 ** a written agreement between you and Digia.
14 14 **
15 15 ** If you have questions regarding the use of this file, please use
16 16 ** contact form at http://qt.digia.com
17 17 ** $QT_END_LICENSE$
18 18 **
19 19 ****************************************************************************/
20 20
21 21 #include <QApplication>
22 22 #include <QMainWindow>
23 23 #include <QChartView>
24 24 #include <QLineSeries>
25 25 #include <QValuesAxis>
26 26 #include <QBarCategoriesAxis>
27 27
28 28 QTCOMMERCIALCHART_USE_NAMESPACE
29 29
30 30 int main(int argc, char *argv[])
31 31 {
32 32 QApplication a(argc, argv);
33 33
34 34 //![1]
35 35 QLineSeries* series = new QLineSeries();
36 36 *series << QPointF(0, 0.6) << QPointF(0.5, 0.4) << QPointF(1, 2) << QPointF(1.5, 1.2) << QPointF(2, 1.0);
37 37 QChart* chart = new QChart();
38 38 chart->legend()->hide();
39 39 chart->addSeries(series);
40 40 //![1]
41 41
42 42 //![2]
43 43 // Customize series
44 44 QPen pen(QRgb(0xfdb157));
45 45 pen.setWidth(5);
46 46 series->setPen(pen);
47 47
48 48 // Customize chart title
49 49 QFont font;
50 50 font.setPixelSize(18);
51 51 chart->setTitleFont(font);
52 52 chart->setTitleBrush(QBrush(Qt::white));
53 53 chart->setTitle("Customchart example");
54 54
55 55 // Customize chart background
56 56 QLinearGradient backgroundGradient;
57 57 backgroundGradient.setStart(QPointF(0,0));
58 58 backgroundGradient.setFinalStop(QPointF(0,1));
59 59 backgroundGradient.setColorAt(0.0, QRgb(0xd2d0d1));
60 60 backgroundGradient.setColorAt(1.0, QRgb(0x4c4547));
61 61 backgroundGradient.setCoordinateMode(QGradient::ObjectBoundingMode);
62 62 chart->setBackgroundBrush(backgroundGradient);
63 63 //![2]
64 64
65 65 //![3]
66 QBarCategoriesAxis* axisX = new QBarCategoriesAxis;
67 QBarCategoriesAxis* axisY = new QBarCategoriesAxis;
66 QBarCategoriesAxis* axisX = new QBarCategoriesAxis();
67 QBarCategoriesAxis* axisY = new QBarCategoriesAxis();
68 68
69 69 // Customize axis label font
70 70 QFont labelsFont;
71 71 labelsFont.setPixelSize(12);
72 72 axisX->setLabelsFont(labelsFont);
73 73 axisY->setLabelsFont(labelsFont);
74 74
75 75 // Customize axis colors
76 76 QPen axisPen(QRgb(0xd18952));
77 77 axisPen.setWidth(2);
78 78 axisX->setAxisPen(axisPen);
79 79 axisY->setAxisPen(axisPen);
80 80
81 81 // Customize axis label colors
82 82 QBrush axisBrush(Qt::white);
83 83 axisX->setLabelsBrush(axisBrush);
84 84 axisY->setLabelsBrush(axisBrush);
85 85
86 86 // Customize grid lines and shades
87 87 axisX->setGridLineVisible(false);
88 88 axisY->setGridLineVisible(false);
89 89 axisY->setShadesPen(Qt::NoPen);
90 90 axisY->setShadesBrush(QBrush(QRgb(0xa5a2a3)));
91 91 axisY->setShadesVisible(true);
92 92 //![3]
93 93
94 94 //![4]
95 95 axisX->append("low");
96 96 axisX->append("optimal");
97 axisX->append("high");
98
97 axisX->append("high");
99 98 axisX->setRange("low","high");
99
100 100 axisY->append("slow");
101 axisY->append("medium");
101 axisY->append("med");
102 102 axisY->append("fast");
103 103 axisY->setRange("slow","fast");
104 // axisY->setTicksCount(4);
104
105 105 chart->setAxisX(axisX, series);
106 106 chart->setAxisY(axisY, series);
107 107 //![4]
108 108
109 109 //![5]
110 110 QChartView* chartView = new QChartView(chart);
111 111 chartView->setRenderHint(QPainter::Antialiasing);
112 112 //![5]
113 113
114 114 //![6]
115 115 QMainWindow window;
116 116 window.setCentralWidget(chartView);
117 117 window.resize(400, 300);
118 118 window.show();
119 119 //![6]
120 120
121 121 return a.exec();
122 122 }
@@ -1,119 +1,117
1 1 /****************************************************************************
2 2 **
3 3 ** Copyright (C) 2012 Digia Plc
4 4 ** All rights reserved.
5 5 ** For any questions to Digia, please use contact form at http://qt.digia.com
6 6 **
7 7 ** This file is part of the Qt Commercial Charts Add-on.
8 8 **
9 9 ** $QT_BEGIN_LICENSE$
10 10 ** Licensees holding valid Qt Commercial licenses may use this file in
11 11 ** accordance with the Qt Commercial License Agreement provided with the
12 12 ** Software or, alternatively, in accordance with the terms contained in
13 13 ** a written agreement between you and Digia.
14 14 **
15 15 ** If you have questions regarding the use of this file, please use
16 16 ** contact form at http://qt.digia.com
17 17 ** $QT_END_LICENSE$
18 18 **
19 19 ****************************************************************************/
20 20
21 21 #include "chartcategoriesaxisx_p.h"
22 #include "qabstractaxis.h"
23 22 #include "chartpresenter_p.h"
24 23 #include "chartanimator_p.h"
24 #include "qbarcategoriesaxis.h"
25 25 #include <QGraphicsLayout>
26 #include <QDebug>
27 26 #include <QFontMetrics>
28 #include <QBarCategoriesAxis>
29 27
30 28 static int label_padding = 5;
31 29
32 30 QTCOMMERCIALCHART_BEGIN_NAMESPACE
33 31
34 32 ChartCategoriesAxisX::ChartCategoriesAxisX(QBarCategoriesAxis *axis,ChartPresenter *presenter) : ChartAxis(axis,presenter),
35 33 m_categoriesAxis(axis)
36 34 {
37 35
38 36 }
39 37
40 38 ChartCategoriesAxisX::~ChartCategoriesAxisX()
41 39 {
42 40 }
43 41
44 42 QVector<qreal> ChartCategoriesAxisX::calculateLayout() const
45 43 {
46 44 Q_ASSERT(m_ticksCount>=2);
47 45
48 46 QVector<qreal> points;
49 47 points.resize(m_ticksCount);
50 48
51 49 // TODO: shift logic
52 50 const qreal deltaX = m_rect.width()/(m_ticksCount-1);
53 51 for (int i = 0; i < m_ticksCount; ++i) {
54 52 int x = i * deltaX + m_rect.left();
55 53 points[i] = x;
56 54 }
57 55 return points;
58 56 }
59 57
60 58 void ChartCategoriesAxisX::updateGeometry()
61 59 {
62 60 const QVector<qreal>& layout = ChartAxis::layout();
63 61
64 62 m_minWidth = 0;
65 63 m_minHeight = 0;
66 64
67 65 if(layout.isEmpty()) return;
68 66
69 67 QStringList ticksList;
70 68
71 69 createCategoryLabels(ticksList,m_min,m_max,m_categoriesAxis->categories());
72 70
73 71 QList<QGraphicsItem *> lines = m_grid->childItems();
74 72 QList<QGraphicsItem *> labels = m_labels->childItems();
75 73 QList<QGraphicsItem *> shades = m_shades->childItems();
76 74 QList<QGraphicsItem *> axis = m_axis->childItems();
77 75
78 76 Q_ASSERT(labels.size() == ticksList.size());
79 77 Q_ASSERT(layout.size() == ticksList.size());
80 78
81 79 QGraphicsLineItem *lineItem = static_cast<QGraphicsLineItem*>(axis.at(0));
82 80 lineItem->setLine(m_rect.left(), m_rect.bottom(), m_rect.right(), m_rect.bottom());
83 81
84 82 for (int i = 0; i < layout.size(); ++i) {
85 83 QGraphicsLineItem *lineItem = static_cast<QGraphicsLineItem*>(lines.at(i));
86 84 lineItem->setLine(layout[i], m_rect.top(), layout[i], m_rect.bottom());
87 85 QGraphicsSimpleTextItem *labelItem = static_cast<QGraphicsSimpleTextItem*>(labels.at(i));
88 86 if (i>=1) {
89 87 labelItem->setText(ticksList.at(i-1));
90 88 const QRectF& rect = labelItem->boundingRect();
91 89 QPointF center = rect.center();
92 90 labelItem->setTransformOriginPoint(center.x(), center.y());
93 91 labelItem->setPos(layout[i] - (layout[i] - layout[i-1])/2 - center.x(), m_rect.bottom() + label_padding);
94 92 m_minWidth+=rect.width();
95 93 m_minHeight=qMax(rect.height()+label_padding,m_minHeight);
96 94 }else{
97 95 labelItem->setVisible(false);
98 96 }
99 97
100 98 if ((i+1)%2 && i>1) {
101 99 QGraphicsRectItem *rectItem = static_cast<QGraphicsRectItem*>(shades.at(i/2-1));
102 100 rectItem->setRect(layout[i-1],m_rect.top(),layout[i]-layout[i-1],m_rect.height());
103 101 }
104 102 lineItem = static_cast<QGraphicsLineItem*>(axis.at(i+1));
105 103 lineItem->setLine(layout[i],m_rect.bottom(),layout[i],m_rect.bottom()+5);
106 104 }
107 105 }
108 106
109 107 void ChartCategoriesAxisX::handleAxisUpdated()
110 108 {
111 109 if(m_categoriesAxis->categories()!=m_categories)
112 110 {
113 111 m_categories=m_categoriesAxis->categories();
114 112 if(ChartAxis::layout().count()==m_categories.size()+1) updateGeometry();
115 113 }
116 114 ChartAxis::handleAxisUpdated();
117 115 }
118 116
119 117 QTCOMMERCIALCHART_END_NAMESPACE
@@ -1,120 +1,120
1 1 /****************************************************************************
2 2 **
3 3 ** Copyright (C) 2012 Digia Plc
4 4 ** All rights reserved.
5 5 ** For any questions to Digia, please use contact form at http://qt.digia.com
6 6 **
7 7 ** This file is part of the Qt Commercial Charts Add-on.
8 8 **
9 9 ** $QT_BEGIN_LICENSE$
10 10 ** Licensees holding valid Qt Commercial licenses may use this file in
11 11 ** accordance with the Qt Commercial License Agreement provided with the
12 12 ** Software or, alternatively, in accordance with the terms contained in
13 13 ** a written agreement between you and Digia.
14 14 **
15 15 ** If you have questions regarding the use of this file, please use
16 16 ** contact form at http://qt.digia.com
17 17 ** $QT_END_LICENSE$
18 18 **
19 19 ****************************************************************************/
20 20
21 21 #include "chartcategoriesaxisy_p.h"
22 #include "qabstractaxis.h"
23 22 #include "chartpresenter_p.h"
24 23 #include "chartanimator_p.h"
24 #include "qbarcategoriesaxis.h"
25 25 #include <QGraphicsLayout>
26 #include <QDebug>
27 26 #include <QFontMetrics>
28 27 #include <QBarCategoriesAxis>
29 28
30 29 static int label_padding = 5;
31 30
32 31 QTCOMMERCIALCHART_BEGIN_NAMESPACE
33 32
34 ChartCategoriesAxisY::ChartCategoriesAxisY(QAbstractAxis *axis,ChartPresenter *presenter) : ChartAxis(axis,presenter)
33 ChartCategoriesAxisY::ChartCategoriesAxisY(QBarCategoriesAxis *axis,ChartPresenter *presenter) : ChartAxis(axis,presenter),
34 m_categoriesAxis(axis)
35 35 {
36 36 }
37 37
38 38 ChartCategoriesAxisY::~ChartCategoriesAxisY()
39 39 {
40 40 }
41 41
42 42 QVector<qreal> ChartCategoriesAxisY::calculateLayout() const
43 43 {
44 44 Q_ASSERT(m_ticksCount>=2);
45 45
46 46 QVector<qreal> points;
47 47 points.resize(m_ticksCount);
48 48
49 49 const qreal deltaY = m_rect.height()/(m_ticksCount-1);
50 50 for (int i = 0; i < m_ticksCount; ++i) {
51 51 int y = i * -deltaY + m_rect.bottom();
52 52 points[i] = y;
53 53 }
54 54
55 55 return points;
56 56 }
57 57
58 58 void ChartCategoriesAxisY::updateGeometry()
59 59 {
60 60 const QVector<qreal>& layout = ChartAxis::layout();
61 61
62 62 m_minWidth = 0;
63 63 m_minHeight = 0;
64 64
65 65 if(layout.isEmpty()) return;
66 66
67 67 QStringList ticksList;
68 68
69 69 createCategoryLabels(ticksList,m_min,m_max,m_categoriesAxis->categories());
70 70
71 71 QList<QGraphicsItem *> lines = m_grid->childItems();
72 72 QList<QGraphicsItem *> labels = m_labels->childItems();
73 73 QList<QGraphicsItem *> shades = m_shades->childItems();
74 74 QList<QGraphicsItem *> axis = m_axis->childItems();
75 75
76 76 Q_ASSERT(labels.size() == ticksList.size());
77 77 Q_ASSERT(layout.size() == ticksList.size());
78 78
79 79 QGraphicsLineItem *lineItem = static_cast<QGraphicsLineItem*>(axis.at(0));
80 lineItem->setLine(m_rect.left(), m_rect.bottom(), m_rect.right(), m_rect.bottom());
80 lineItem->setLine(m_rect.left() , m_rect.top(), m_rect.left(), m_rect.bottom());
81 81
82 82 for (int i = 0; i < layout.size(); ++i) {
83 83 QGraphicsLineItem *lineItem = static_cast<QGraphicsLineItem*>(lines.at(i));
84 84 lineItem->setLine(layout[i], m_rect.top(), layout[i], m_rect.bottom());
85 85 QGraphicsSimpleTextItem *labelItem = static_cast<QGraphicsSimpleTextItem*>(labels.at(i));
86 86 if(i>=1){
87 87 labelItem->setText(ticksList.at(i-1));
88 88 const QRectF& rect = labelItem->boundingRect();
89 89 QPointF center = rect.center();
90 90 labelItem->setTransformOriginPoint(center.x(), center.y());
91 labelItem->setPos(layout[i] - (layout[i] - layout[i-1])/2 - center.x(), m_rect.bottom() + label_padding);
91 labelItem->setPos(m_rect.left() - rect.width() - label_padding , layout[i] - (layout[i] - layout[i-1])/2 -center.y());
92 92 m_minWidth+=rect.width();
93 93 m_minHeight=qMax(rect.height()+label_padding,m_minHeight);
94 94 }else{
95 95 labelItem->setVisible(false);
96 96 }
97 97
98 98
99 99 if ((i+1)%2 && i>1) {
100 100 QGraphicsRectItem *rectItem = static_cast<QGraphicsRectItem*>(shades.at(i/2-1));
101 rectItem->setRect(layout[i-1],m_rect.top(),layout[i]-layout[i-1],m_rect.height());
101 rectItem->setRect(m_rect.left(),layout[i],m_rect.width(),layout[i-1]-layout[i]);
102 102 }
103 103 lineItem = static_cast<QGraphicsLineItem*>(axis.at(i+1));
104 lineItem->setLine(layout[i],m_rect.bottom(),layout[i],m_rect.bottom()+5);
104 lineItem->setLine(m_rect.left()-5,layout[i],m_rect.left(),layout[i]);
105 105 }
106 106 }
107 107
108 108
109 109 void ChartCategoriesAxisY::handleAxisUpdated()
110 110 {
111 111
112 112 if(m_categoriesAxis->categories()!=m_categories)
113 113 {
114 114 m_categories=m_categoriesAxis->categories();
115 115 if(ChartAxis::layout().count()==m_categories.size()+1) updateGeometry();
116 116 }
117 117 ChartAxis::handleAxisUpdated();
118 118 }
119 119
120 120 QTCOMMERCIALCHART_END_NAMESPACE
@@ -1,61 +1,61
1 1 /****************************************************************************
2 2 **
3 3 ** Copyright (C) 2012 Digia Plc
4 4 ** All rights reserved.
5 5 ** For any questions to Digia, please use contact form at http://qt.digia.com
6 6 **
7 7 ** This file is part of the Qt Commercial Charts Add-on.
8 8 **
9 9 ** $QT_BEGIN_LICENSE$
10 10 ** Licensees holding valid Qt Commercial licenses may use this file in
11 11 ** accordance with the Qt Commercial License Agreement provided with the
12 12 ** Software or, alternatively, in accordance with the terms contained in
13 13 ** a written agreement between you and Digia.
14 14 **
15 15 ** If you have questions regarding the use of this file, please use
16 16 ** contact form at http://qt.digia.com
17 17 ** $QT_END_LICENSE$
18 18 **
19 19 ****************************************************************************/
20 20
21 21 // W A R N I N G
22 22 // -------------
23 23 //
24 24 // This file is not part of the QtCommercial Chart API. It exists purely as an
25 25 // implementation detail. This header file may change from version to
26 26 // version without notice, or even be removed.
27 27 //
28 28 // We mean it.
29 29
30 30 #ifndef CHARTCATEGORIESAXISY_H
31 31 #define CHARTCATEGORIESAXISY_H
32 32
33 33 #include "chartaxis_p.h"
34 34
35 35 QTCOMMERCIALCHART_BEGIN_NAMESPACE
36 36
37 37 class QAbstractAxis;
38 38 class QBarCategoriesAxis;
39 39 class ChartPresenter;
40 40
41 41 class ChartCategoriesAxisY : public ChartAxis
42 42 {
43 43 public:
44 ChartCategoriesAxisY(QAbstractAxis *axis, ChartPresenter *presenter);
44 ChartCategoriesAxisY(QBarCategoriesAxis *axis, ChartPresenter *presenter);
45 45 ~ChartCategoriesAxisY();
46 46
47 47 AxisType axisType() const { return Y_AXIS;}
48 48
49 49 protected:
50 50 QVector<qreal> calculateLayout() const;
51 51 void updateGeometry();
52 52 Q_SLOTS
53 53 void handleAxisUpdated();
54 54 private:
55 55 QStringList m_categories;
56 56 QBarCategoriesAxis *m_categoriesAxis;
57 57 };
58 58
59 59 QTCOMMERCIALCHART_END_NAMESPACE
60 60
61 61 #endif /* CHARTCATEGORIESAXISY_H */
General Comments 0
You need to be logged in to leave comments. Login now