##// END OF EJS Templates
Integrated scatter type series...
Tero Ahola -
r42:5fcd249308db
parent child
Show More
@@ -0,0 +1,67
1 #include "qscatterseries.h"
2 #include "qscatterseries_p.h"
3 #include "qchart.h"
4 #include <QPainter>
5 #include <QGraphicsScene>
6
7 QTCOMMERCIALCHART_BEGIN_NAMESPACE
8
9 //#define QSeriesData QList<qreal>
10
11 QScatterSeriesPrivate::QScatterSeriesPrivate(QList<qreal> x, QList<qreal> y, QGraphicsItem *parent) :
12 QGraphicsItem(parent),
13 m_x(x),
14 m_y(y)
15 {
16 }
17
18 void QScatterSeriesPrivate::setSize()
19 {
20 }
21
22 QRectF QScatterSeriesPrivate::boundingRect() const
23 {
24 return QRectF(0, 0, 100, 100);
25 }
26
27 void QScatterSeriesPrivate::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
28 {
29 QPen pen = painter->pen();
30 QBrush brush = pen.brush();
31 // TODO: The opacity should be user definable...
32 brush.setColor(QColor(255, 82, 0, 50));
33 pen.setBrush(brush);
34 pen.setWidth(4);
35 painter->setPen(pen);
36 QTransform transform = painter->transform();
37
38 // TODO: get min and max values of the axes from the QChart (or some dedicated class)
39 const qreal xmin = 0.0;
40 const qreal xmax = 100.0;
41 const qreal xscale = scene()->width() / (xmax - xmin);
42 const qreal ymin = 0.0;
43 const qreal ymax = 100.0;
44 const qreal yscale = scene()->height() / (ymax - ymin);
45
46 for (int i(0); i < m_x.count() && i < m_y.count(); i++) {
47 transform.reset();
48 transform.translate(m_x.at(i) * xscale, m_y.at(i) * yscale);
49 painter->setTransform(transform);
50 painter->drawArc(0, 0, 4, 4, 0, 5760);
51 }
52 }
53
54 QScatterSeries::QScatterSeries(QList<qreal> x, QList<qreal> y, QObject *parent) :
55 QChartSeries(parent),
56 d(new QScatterSeriesPrivate(x, y, qobject_cast<QGraphicsItem *> (parent)))
57 {
58 }
59
60 QScatterSeries::~QScatterSeries()
61 {
62 delete d;
63 }
64
65 #include "moc_qscatterseries.cpp"
66
67 QTCOMMERCIALCHART_END_NAMESPACE
@@ -0,0 +1,29
1 #ifndef QSCATTERSERIES_H
2 #define QSCATTERSERIES_H
3
4 #include "qchartseries.h"
5
6 QTCOMMERCIALCHART_BEGIN_NAMESPACE
7 class QScatterSeriesPrivate;
8
9 class QTCOMMERCIALCHART_EXPORT QScatterSeries : public QChartSeries
10 {
11 Q_OBJECT
12 public:
13 //QScatterSeries(QSeriesData *data, QObject *chart);
14 QScatterSeries(QList<qreal> x, QList<qreal> y, QObject *chart = 0);
15 ~QScatterSeries();
16
17 public: // from QChartSeries
18 virtual QChartSeriesType type() const { return QChartSeries::SeriesTypeScatter; }
19
20 private:
21 Q_DECLARE_PRIVATE(QScatterSeries)
22 Q_DISABLE_COPY(QScatterSeries)
23 friend class QChart;
24 QScatterSeriesPrivate *const d;
25 };
26
27 QTCOMMERCIALCHART_END_NAMESPACE
28
29 #endif // QSCATTERSERIES_H
@@ -0,0 +1,29
1 #ifndef QSCATTERSERIESPRIVATE_H
2 #define QSCATTERSERIESPRIVATE_H
3
4 #include "qchartseries.h"
5 #include <QGraphicsItem>
6
7 QTCOMMERCIALCHART_BEGIN_NAMESPACE
8
9 /*!
10 * The PIMPL class of QScatterSeries.
11 */
12 class QScatterSeriesPrivate : public QGraphicsItem
13 {
14 public:
15 QScatterSeriesPrivate(QList<qreal> x, QList<qreal> y, QGraphicsItem *parent);
16
17 public: // from QGraphicsItem
18 void setSize();
19 QRectF boundingRect() const;
20 void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
21
22 // TODO: use the chart data class instead of list of x and y values?
23 QList<qreal> m_x;
24 QList<qreal> m_y;
25 };
26
27 QTCOMMERCIALCHART_END_NAMESPACE
28
29 #endif // QSCATTERSERIES_H
@@ -1,114 +1,140
1 1 #include "qchart.h"
2 2 #include "qchartseries.h"
3 #include "qscatterseries.h"
4 #include "qscatterseries_p.h"
3 5 #include "xylinechartitem_p.h"
4 6 #include "xyplotdomain_p.h"
5 7 #include "axis_p.h"
6 8 #include "xygrid_p.h"
9 #include <QGraphicsScene>
7 10 #include <QDebug>
8 11
9 12 QTCOMMERCIALCHART_BEGIN_NAMESPACE
10 13
11 14 class QChartPrivate
12 15 {
13 16 public:
14 17
15 18 QChartPrivate(QChart* parent):
16 19 m_axisX(new Axis(parent)),
17 20 m_axisY(new Axis(parent)),
18 21 m_grid(new XYGrid(parent)),
19 22 m_plotDataIndex(0),
20 23 m_marginSize(0){}
21 24
22 25 Axis* m_axisX;
23 26 Axis* m_axisY;
24 27 XYGrid* m_grid;
25 28 QRect m_rect;
26 29 QList<const QChartSeries*> m_series;
27 30 QList<XYPlotDomain> m_plotDataList;
28 31 QList<QGraphicsItem*> m_items;
29 32 int m_plotDataIndex;
30 33 int m_marginSize;
31 34
32 35 };
33 36
34 37 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
35 38
36 39 QChart::QChart(QGraphicsItem* parent):QGraphicsItem(parent),
37 40 d_ptr(new QChartPrivate(this))
38 41 {
39 42 // setFlags(QGraphicsItem::ItemClipsChildrenToShape);
40 43 // set axis
41 44 Q_D(QChart);
42 45 d->m_axisY->rotate(90);
43 46
44 47 //TODO hardcoded values , to removed soon
45 48 XYPlotDomain data;
46 49 data.m_minX = 0.0;
47 50 data.m_maxX = 100.0;
48 51 data.m_minY = 0.0;
49 52 data.m_maxY = 100.0;
50 53 data.m_ticksX=4;
51 54 data.m_ticksY=4;
52 55
53 56 d->m_plotDataList.clear();
54 57 d->m_plotDataList << data;
55 58
56 59 d->m_grid->setZValue(10);
57 60 d->m_grid->setXYPlotData(d->m_plotDataList.at(0));
58 61 }
59 62
60 63 QChart::~QChart(){}
61 64
62 65 QRectF QChart::boundingRect() const
63 66 {
64 67 Q_D(const QChart);
65 68 return d->m_rect;
66 69 }
67 70
68 71 void QChart::addSeries(QChartSeries* series)
69 72 {
70 73 Q_D(QChart);
71 74 d->m_series<<series;
72 75
73 76 switch(series->type())
74 77 {
75 78 case QChartSeries::SeriesTypeLine: {
76 79 XYLineChartItem* item = new XYLineChartItem(reinterpret_cast<QXYChartSeries*>(series),this);
77 80 item->updateXYPlotData(d->m_plotDataList.at(0));
78 81 d->m_items<<item;
79 82 break;
80 83 }
81 84 case QChartSeries::SeriesTypeScatter: {
82 85 break;
83 86 }
84 87 }
85 88 }
86 89
90 QChartSeries* QChart::createSeries(QList<qreal> x, QList<qreal> y, QChartSeries::QChartSeriesType type)
91 {
92 Q_D(QChart);
93
94 // TODO: support also other types
95 Q_ASSERT(type == QChartSeries::SeriesTypeScatter);
96 QChartSeries *series = 0;
97
98 switch (type) {
99 case QChartSeries::SeriesTypeScatter: {
100 QScatterSeries *scatterSeries = new QScatterSeries(x, y, this);
101 d->m_items.append(scatterSeries->d);
102 scene()->addItem(scatterSeries->d);
103 //series = qobject_cast<QChartSeries *>(scatterSeries);
104 break;
105 }
106 default:
107 break;
108 }
109
110 return series;
111 }
87 112 void QChart::setSize(const QSizeF& size)
88 113 {
89 114 Q_D(QChart);
90 115 //TODO refactor to setGeometry
91 116 d->m_rect = QRect(QPoint(0,0),size.toSize());
92 117 d->m_rect.adjust(margin(),margin(),-margin(),-margin());
93 118 d->m_grid->setPos(d->m_rect.topLeft());
94 119 d->m_grid->setSize(d->m_rect.size());
95 120 d->m_plotDataList[0].m_viewportRect = d->m_rect;
121 // TODO: line chart items would need to be updated separately as they don't support update
122 // via paint method
96 123 foreach(QGraphicsItem* item , d->m_items)
97 reinterpret_cast<XYLineChartItem*>(item)->updateXYPlotData(d->m_plotDataList.at(0));
124 reinterpret_cast<XYLineChartItem*>(item)->updateXYPlotData(d->m_plotDataList.at(0));
98 125 update();
99
100 126 }
101 127
102 128 int QChart::margin() const
103 129 {
104 130 Q_D(const QChart);
105 131 return d->m_marginSize;
106 132 }
107 133
108 134 void QChart::setMargin(int margin)
109 135 {
110 136 Q_D(QChart);
111 137 d->m_marginSize = margin;
112 138 }
113 139
114 140 QTCOMMERCIALCHART_END_NAMESPACE
@@ -1,43 +1,55
1 1 #ifndef CHART_H
2 2 #define CHART_H
3 3
4 4 #include <qchartglobal.h>
5 #include <qchartseries.h>
5 6 #include <QGraphicsItem>
6 7
7 8 QTCOMMERCIALCHART_BEGIN_NAMESPACE
8 9
9 10 class Axis;
10 11 class XYGrid;
11 12 class QChartSeries;
12 13 class XYPlotDomain;
13 14 class QChartPrivate;
14 15
15 class QTCOMMERCIALCHART_EXPORT QChart : public QGraphicsItem
16 // TODO: We don't need to have QChart tied to QGraphicsItem:
17 //class QTCOMMERCIALCHART_EXPORT QChart
18 //class QTCOMMERCIALCHART_EXPORT QChartGraphicsItem : public QGraphicsItem {
19 // public: QChartGraphicsItem(QChart &chart);
20
21 /*!
22 * TODO: define the responsibilities
23 */
24 class QTCOMMERCIALCHART_EXPORT QChart : public QGraphicsItem, public QObject
16 25 {
17 26
18 27 public:
19 28 QChart(QGraphicsItem* parent = 0);
20 29 virtual ~QChart();
21 30
22 31 //from QGraphicsItem
23 32 virtual QRectF boundingRect() const;
24 33 virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget){};
25 34
26 35 void addSeries(QChartSeries* series);
36 //TODO: QChartSeries* createSeries(QSeriesData *data, QChartSeries::QChartSeriesType type);
37 // TODO: who owns the series now? maybe owned by chart and returned a reference instead...
38 QChartSeries* createSeries(QList<qreal> x, QList<qreal> y, QChartSeries::QChartSeriesType type);
27 39
28 40 virtual void setSize(const QSizeF& rect);
29 41 void setMargin(int margin);
30 42 int margin() const;
31 43
32 44 protected:
33 45 QChartPrivate * const d_ptr;
34 46
35 47 private:
36 48 Q_DISABLE_COPY(QChart)
37 49 Q_DECLARE_PRIVATE(QChart)
38 50
39 51 };
40 52
41 53 QTCOMMERCIALCHART_END_NAMESPACE
42 54
43 55 #endif
@@ -1,69 +1,75
1 1 #include "qchartwidget.h"
2 2 #include "qchartseries.h"
3 3 #include <QGraphicsView>
4 4 #include <QGraphicsScene>
5 5 #include <QResizeEvent>
6 6
7 7 QTCOMMERCIALCHART_BEGIN_NAMESPACE
8 8
9 9 class QChartWidgetPrivate
10 10 {
11 11 public:
12 12 QChartWidgetPrivate(QChartWidget *parent) :
13 13 m_view(0),
14 14 m_scene(0),
15 15 m_chart(0)
16 16 {
17 17 m_scene = new QGraphicsScene();
18 18 m_view = new QGraphicsView(parent);
19 19 m_view->setScene(m_scene);
20 20 m_chart = new QChart();
21 21 m_scene->addItem(m_chart);
22 m_view->show();
22 23 }
23 24
24 25 ~QChartWidgetPrivate() {
25 26 }
26 27
27 28 QGraphicsView *m_view;
28 29 QGraphicsScene *m_scene;
29 30 QChart* m_chart;
30 31 };
31 32
32 33 ///////////////////////////////////////////////////////////////////////////////////////////////////
33 34
34 35 QChartWidget::QChartWidget(QWidget *parent) :
35 36 QWidget(parent),
36 37 d_ptr(new QChartWidgetPrivate(this))
37 38 {
38 39 setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
39 40 }
40 41
41 42 QChartWidget::~QChartWidget()
42 43 {
43 44 delete d_ptr;
44 45 }
45 46
46 47 void QChartWidget::resizeEvent(QResizeEvent *event)
47 48 {
48 49 Q_D(QChartWidget);
49 50 d->m_view->resize(size().width(),size().height());
50 51 d->m_scene->setSceneRect(0,0,size().width(),size().height());
51 52 d->m_chart->setSize(size());
52 53 QWidget::resizeEvent(event);
53 54 }
54 55
55 56 QSize QChartWidget::sizeHint() const
56 57 {
57 58 // TODO: calculate size hint based on contents?
58 59 return QSize(100, 100);
59 60 }
60 61
61 62 void QChartWidget::addSeries(QChartSeries* series)
62 63 {
63 64 Q_D(QChartWidget);
64 65 d->m_chart->addSeries(series);
65 66 }
66 67
68 QChartSeries* QChartWidget::createSeries(QList<qreal> x, QList<qreal> y, QChartSeries::QChartSeriesType type)
69 {
70 Q_D(QChartWidget);
71 return d->m_chart->createSeries(x, y, type);
72 }
67 73 #include "moc_qchartwidget.cpp"
68 74
69 75 QTCOMMERCIALCHART_END_NAMESPACE
@@ -1,36 +1,38
1 1 #ifndef QCHARTWIDGET_H
2 2 #define QCHARTWIDGET_H
3 3
4 4 #include "qchartglobal.h"
5 5 #include "qchart.h"
6 6 #include <QWidget>
7 7
8 8 QTCOMMERCIALCHART_BEGIN_NAMESPACE
9 9
10 10 class QChartSeries;
11 11 class QChartWidgetPrivate;
12 12
13 13 class QTCOMMERCIALCHART_EXPORT QChartWidget : public QWidget
14 14 {
15 15 Q_OBJECT
16 16 public:
17 17 explicit QChartWidget(QWidget *parent = 0);
18 18 ~QChartWidget();
19 19
20 20 //implement from QWidget
21 21 void resizeEvent(QResizeEvent *event);
22 22 QSize sizeHint() const;
23 23
24 // TODO: addSeries and createSeries are optional solutions
24 25 void addSeries(QChartSeries* series);
26 QChartSeries* createSeries(QList<qreal> x, QList<qreal> y, QChartSeries::QChartSeriesType type);
25 27 protected:
26 28 QChartWidgetPrivate * const d_ptr;
27 29
28 30 private:
29 31 Q_DISABLE_COPY(QChartWidget)
30 32 Q_DECLARE_PRIVATE(QChartWidget)
31 33
32 34 };
33 35
34 36 QTCOMMERCIALCHART_END_NAMESPACE
35 37
36 38 #endif // QCHARTWIDGET_H
@@ -1,73 +1,76
1 1 !include( ../common.pri ) {
2 2 error( Couldn't find the common.pri file! )
3 3 }
4 4
5 5
6 6 TARGET = QtCommercialChart
7 7 DESTDIR = $$CHART_BUILD_LIB_DIR
8 8 TEMPLATE = lib
9 9 QT += core \
10 10 gui
11 11
12 12 CONFIG += debug_and_release
13 13 CONFIG(debug, debug|release):TARGET = QtCommercialChartd
14 14
15 15 SOURCES += \
16 16 xylinechart/qxychartseries.cpp \
17 17 xylinechart/xylinechartitem.cpp \
18 18 xylinechart/xygrid.cpp \
19 19 xylinechart/xyplotdomain.cpp \
20 qscatterseries.cpp \
20 21 qchart.cpp \
21 22 axis.cpp \
22 23 qchartwidget.cpp
23 24
24 25 PRIVATE_HEADERS += \
25 26 xylinechart/xylinechartitem_p.h \
26 27 xylinechart/xyplotdomain_p.h \
27 28 xylinechart/xygrid_p.h \
29 qscatterseries_p.h \
28 30 axis_p.h
29 31
30 32 PUBLIC_HEADERS += \
31 33 qchartseries.h \
34 qscatterseries.h \
32 35 qchart.h \
33 36 qchartwidget.h \
34 37 qchartglobal.h \
35 38 xylinechart/qxychartseries.h
36 39
37 40 HEADERS += $$PUBLIC_HEADERS
38 41 HEADERS += $$PRIVATE_HEADERS
39 42
40 43 INCLUDEPATH += xylinechart \
41 44 .
42 45
43 46 OBJECTS_DIR = $$CHART_BUILD_DIR/lib
44 47 MOC_DIR = $$CHART_BUILD_DIR/lib
45 48 UI_DIR = $$CHART_BUILD_DIR/lib
46 49 RCC_DIR = $$CHART_BUILD_DIR/lib
47 50
48 51
49 52 DEFINES += QTCOMMERCIALCHART_LIBRARY
50 53
51 54 public_headers.path = $$[QT_INSTALL_HEADERS]/QtCommercialChart
52 55 public_headers.files = $$PUBLIC_HEADERS
53 56 target.path = $$[QT_INSTALL_LIBS]
54 57 INSTALLS += target \
55 58 public_headers
56 59
57 60
58 61 install_build_headers.name = bild_headers
59 62 install_build_headers.output = $$CHART_BUILD_HEADER_DIR/${QMAKE_FILE_BASE}.h
60 63 install_build_headers.input = PUBLIC_HEADERS
61 64 install_build_headers.commands = $$QMAKE_COPY ${QMAKE_FILE_NAME} $$CHART_BUILD_HEADER_DIR
62 65 install_build_headers.CONFIG += target_predeps no_link
63 66 QMAKE_EXTRA_COMPILERS += install_build_headers
64 67
65 68 chartversion.target = qchartversion_p.h
66 69 chartversion.commands = @echo "build_time" > $$chartversion.target;
67 70 chartversion.depends = $$HEADERS $$SOURCES
68 71 PRE_TARGETDEPS += qchartversion_p.h
69 72 QMAKE_CLEAN+= qchartversion_p.h
70 73 QMAKE_EXTRA_TARGETS += chartversion
71 74
72 75 unix:QMAKE_DISTCLEAN += -r $$CHART_BUILD_HEADER_DIR $$CHART_BUILD_LIB_DIR
73 win32:QMAKE_DISTCLEAN += /Q $$CHART_BUILD_HEADER_DIR $$CHART_BUILD_LIB_DIR No newline at end of file
76 win32:QMAKE_DISTCLEAN += /Q $$CHART_BUILD_HEADER_DIR $$CHART_BUILD_LIB_DIR
@@ -1,225 +1,231
1 1 #include "mainwidget.h"
2 2 #include "dataseriedialog.h"
3 3 #include <qxychartseries.h>
4 4 #include <QPushButton>
5 5 #include <QComboBox>
6 6 #include <QSpinBox>
7 7 #include <QCheckBox>
8 8 #include <QGridLayout>
9 9 #include <QHBoxLayout>
10 10 #include <QLabel>
11 11 #include <QSpacerItem>
12 12 #include <QMessageBox>
13 13 #include <cmath>
14 14 #include <QDebug>
15 15
16 16 QTCOMMERCIALCHART_USE_NAMESPACE
17 17
18 18 MainWidget::MainWidget(QWidget *parent) :
19 19 QWidget(parent)
20 20 {
21 21 QPushButton *addSeriesButton = new QPushButton("Add series");
22 22 connect(addSeriesButton, SIGNAL(clicked()), this, SLOT(addSeries()));
23 23
24 24 // Chart background
25 25 QComboBox *backgroundCombo = new QComboBox(this);
26 26 backgroundCombo->addItem("None");
27 27 backgroundCombo->addItem("TODO Grid");
28 28 backgroundCombo->addItem("TODO Image");
29 29 connect(backgroundCombo, SIGNAL(currentIndexChanged(int)),
30 30 this, SLOT(backgroundChanged(int)));
31 31
32 32 // Axis
33 33 // TODO: multiple axes?
34 34 m_autoScaleCheck = new QCheckBox("Automatic scaling");
35 35 connect(m_autoScaleCheck, SIGNAL(stateChanged(int)), this, SLOT(autoScaleChanged(int)));
36 36 // Allow setting also non-sense values (like -2147483648 and 2147483647)
37 37 m_xMinSpin = new QSpinBox();
38 38 m_xMinSpin->setMinimum(INT_MIN);
39 39 m_xMinSpin->setMaximum(INT_MAX);
40 40 m_xMinSpin->setValue(0);
41 41 connect(m_xMinSpin, SIGNAL(valueChanged(int)), this, SLOT(xMinChanged(int)));
42 42 m_xMaxSpin = new QSpinBox();
43 43 m_xMaxSpin->setMinimum(INT_MIN);
44 44 m_xMaxSpin->setMaximum(INT_MAX);
45 45 m_xMaxSpin->setValue(10);
46 46 connect(m_xMaxSpin, SIGNAL(valueChanged(int)), this, SLOT(xMaxChanged(int)));
47 47 m_yMinSpin = new QSpinBox();
48 48 m_yMinSpin->setMinimum(INT_MIN);
49 49 m_yMinSpin->setMaximum(INT_MAX);
50 50 m_yMinSpin->setValue(0);
51 51 connect(m_yMinSpin, SIGNAL(valueChanged(int)), this, SLOT(yMinChanged(int)));
52 52 m_yMaxSpin = new QSpinBox();
53 53 m_yMaxSpin->setMinimum(INT_MIN);
54 54 m_yMaxSpin->setMaximum(INT_MAX);
55 55 m_yMaxSpin->setValue(10);
56 56 connect(m_yMaxSpin, SIGNAL(valueChanged(int)), this, SLOT(yMaxChanged(int)));
57 57
58 58 QGridLayout *grid = new QGridLayout();
59 59 QHBoxLayout *hbox = new QHBoxLayout();
60 60 //grid->addWidget(new QLabel("Add series:"), 0, 0);
61 61 grid->addWidget(addSeriesButton, 0, 1);
62 62 grid->addWidget(new QLabel("Background:"), 2, 0);
63 63 grid->addWidget(backgroundCombo, 2, 1);
64 64 grid->addWidget(m_autoScaleCheck, 3, 0);
65 65 grid->addWidget(new QLabel("x min:"), 4, 0);
66 66 grid->addWidget(m_xMinSpin, 4, 1);
67 67 grid->addWidget(new QLabel("x max:"), 5, 0);
68 68 grid->addWidget(m_xMaxSpin, 5, 1);
69 69 grid->addWidget(new QLabel("y min:"), 6, 0);
70 70 grid->addWidget(m_yMinSpin, 6, 1);
71 71 grid->addWidget(new QLabel("y max:"), 7, 0);
72 72 grid->addWidget(m_yMaxSpin, 7, 1);
73 73 // add row with empty label to make all the other rows static
74 74 grid->addWidget(new QLabel(""), 8, 0);
75 75 grid->setRowStretch(8, 1);
76 76
77 77 hbox->addLayout(grid);
78 78
79 79 m_chartWidget = new QChartWidget(this);
80 80 //m_chartWidget->setColor(Qt::red);
81 81 hbox->addWidget(m_chartWidget);
82 82 // hbox->setStretch(1, 1);
83 83
84 84 setLayout(hbox);
85 85
86 86 m_autoScaleCheck->setChecked(true);
87 87 chartTypeChanged(4);
88 88 testDataChanged(0);
89 89 }
90 90
91 91 void MainWidget::addSeries()
92 92 {
93 93 DataSerieDialog dialog(m_defaultSeries, this);
94 94 connect(&dialog, SIGNAL(accepted(QString, QString)), this, SLOT(addSeries(QString, QString)));
95 95 dialog.exec();
96 96 }
97 97
98 98 void MainWidget::addSeries(QString series, QString data)
99 99 {
100 100 qDebug() << "addSeries: " << series << " data: " << data;
101 101 m_defaultSeries = series;
102 102
103 QXYChartSeries* series0 = 0;
104
105 // TODO: color of the series
106 if (series == "Scatter") {
107 series0 = QXYChartSeries::create();
108 } else if (series == "Line") {
109 series0 = QXYChartSeries::create();
110 } else {
111 // TODO
112 series0 = QXYChartSeries::create();
113 }
103 // TODO: a dedicated data class for storing x and y values
104 QList<qreal> x;
105 QList<qreal> y;
114 106
115 107 if (data == "linear") {
116 for (int i = 0; i < 10; i++)
117 series0->add(i, 10);
108 for (int i = 0; i < 10; i++) {
109 x.append(i);
110 y.append(10);
111 }
118 112 } else if (data == "linear, 1M") {
119 for (int i = 0; i < 1000000; i++)
120 series0->add(i, 20);
113 for (int i = 0; i < 10000; i++) {
114 x.append(i);
115 y.append(20);
116 }
121 117 } else if (data == "SIN") {
122 for (int x = 0; x < 100; x++)
123 series0->add(x, abs(sin(3.14159265358979 / 50 * x) * 100));
124 QList<QXYChartSeries*> dataset;
125 dataset << series0;
118 for (int i = 0; i < 100; i++) {
119 x.append(i);
120 y.append(abs(sin(3.14159265358979 / 50 * i) * 100));
121 }
126 122 } else if (data == "SIN + random") {
127 for (qreal x = 0; x < 100; x += 0.1) {
128 series0->add(x + (rand() % 5),
129 abs(sin(3.14159265358979 / 50 * x) * 100) + (rand() % 5));
123 for (qreal i = 0; i < 100; i += 0.1) {
124 x.append(i + (rand() % 5));
125 y.append(abs(sin(3.14159265358979 / 50 * i) * 100) + (rand() % 5));
130 126 }
131 127 } else {
132 128 // TODO: check if data has a valid file name
133 129 }
134 130
135 m_chartWidget->addSeries(series0);
131 // TODO: color of the series
132 if (series == "Scatter") {
133 /*QChartSeries* scatterSeries = */m_chartWidget->createSeries(x, y, QChartSeries::SeriesTypeScatter);
134 } else if (series == "Line") {
135 QXYChartSeries* series0 = QXYChartSeries::create();
136 for (int i = 0; i < 1000000; i++)
137 series0->add(i, 20);
138 m_chartWidget->addSeries(series0);
139 } else {
140 // TODO
141 }
136 142 }
137 143
138 144 void MainWidget::chartTypeChanged(int itemIndex)
139 145 {
140 146 // TODO: change chart type
141 147 switch (itemIndex) {
142 148 case 4:
143 149 //m_chartWidget->setType(4);
144 150 break;
145 151 default: {
146 152 //m_chartWidget->setType(0);
147 153 break;
148 154 }
149 155 }
150 156 }
151 157
152 158 void MainWidget::testDataChanged(int itemIndex)
153 159 {
154 160 qDebug() << "testDataChanged: " << itemIndex;
155 161
156 162 // switch (itemIndex) {
157 163 // case 0: {
158 164 // QList<QChartDataPoint> data;
159 165 // for (int x = 0; x < 20; x++) {
160 166 // data.append(QChartDataPoint() << x << x / 2);
161 167 // }
162 168 // m_chartWidget->setData(data);
163 169 // break;
164 170 // }
165 171 // case 1: {
166 172 // QList<QChartDataPoint> data;
167 173 // for (int x = 0; x < 100; x++) {
168 174 // data.append(QChartDataPoint() << x - 200 << 2 * (uint(sin(3.14159/50*x)*80) % 100));
169 175 // }
170 176 // m_chartWidget->setData(data);
171 177 // break;
172 178 // }
173 179 // case 2: {
174 180 // QList<QChartDataPoint> data;
175 181 // for (int x = 0; x < 1000; x++) {
176 182 // data.append(QChartDataPoint() << x - 200 << 2 * (uint(sin(3.14159/50*x)*80) % 100) + (rand() % 100 * 0.2));
177 183 // data.append(QChartDataPoint() << x - 200 << 2 * (uint(sin(3.14159/50*x)*80) % 100) + (rand() % 100 * 0.2));
178 184 // data.append(QChartDataPoint() << x - 200 << 2 * (uint(sin(3.14159/50*x)*80) % 100) + (rand() % 100 * 0.2));
179 185 // }
180 186 // m_chartWidget->setData(data);
181 187 // break;
182 188 // }
183 189 // default:
184 190 // break;
185 191 // }
186 192 }
187 193
188 194 void MainWidget::backgroundChanged(int itemIndex)
189 195 {
190 196 qDebug() << "backgroundChanged: " << itemIndex;
191 197 }
192 198
193 199 void MainWidget::autoScaleChanged(int value)
194 200 {
195 201 if (value) {
196 202 // TODO: enable auto scaling
197 203 } else {
198 204 // TODO: set scaling manually (and disable auto scaling)
199 205 }
200 206
201 207 m_xMinSpin->setEnabled(!value);
202 208 m_xMaxSpin->setEnabled(!value);
203 209 m_yMinSpin->setEnabled(!value);
204 210 m_yMaxSpin->setEnabled(!value);
205 211 }
206 212
207 213 void MainWidget::xMinChanged(int value)
208 214 {
209 215 qDebug() << "xMinChanged: " << value;
210 216 }
211 217
212 218 void MainWidget::xMaxChanged(int value)
213 219 {
214 220 qDebug() << "xMaxChanged: " << value;
215 221 }
216 222
217 223 void MainWidget::yMinChanged(int value)
218 224 {
219 225 qDebug() << "yMinChanged: " << value;
220 226 }
221 227
222 228 void MainWidget::yMaxChanged(int value)
223 229 {
224 230 qDebug() << "yMaxChanged: " << value;
225 231 }
General Comments 0
You need to be logged in to leave comments. Login now