main.cpp Example File
openglseries/main.cpp
#include "datasource.h"
#include <QtWidgets/QApplication>
#include <QtWidgets/QMainWindow>
#include <QtCharts/QChartView>
#include <QtCharts/QLineSeries>
#include <QtCharts/QScatterSeries>
#include <QtCharts/QValueAxis>
#include <QtCharts/QLogValueAxis>
#include <QtWidgets/QLabel>
QT_CHARTS_USE_NAMESPACE
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QStringList colors;
colors << "red" << "blue" << "green" << "black";
QChart *chart = new QChart();
chart->legend()->hide();
#ifdef USE_LOG_AXIS
QLogValueAxis *axisX = new QLogValueAxis;
QLogValueAxis *axisY = new QLogValueAxis;
#else
QValueAxis *axisX = new QValueAxis;
QValueAxis *axisY = new QValueAxis;
#endif
chart->addAxis(axisX, Qt::AlignBottom);
chart->addAxis(axisY, Qt::AlignLeft);
const int seriesCount = 10;
#ifdef DONT_USE_GL_SERIES
const int pointCount = 100;
chart->setTitle("Unaccelerated Series");
#else
const int pointCount = 10000;
chart->setTitle("OpenGL Accelerated Series");
#endif
QList<QXYSeries *> seriesList;
for (int i = 0; i < seriesCount; i++) {
QXYSeries *series = 0;
int colorIndex = i % colors.size();
if (i % 2) {
series = new QScatterSeries;
QScatterSeries *scatter = static_cast<QScatterSeries *>(series);
scatter->setColor(QColor(colors.at(colorIndex)));
scatter->setMarkerSize(qreal(colorIndex + 2) / 2.0);
scatter->setPen(QPen("black"));
} else {
series = new QLineSeries;
series->setPen(QPen(QBrush(QColor(colors.at(colorIndex))),
qreal(colorIndex + 2) / 2.0));
}
seriesList.append(series);
#ifdef DONT_USE_GL_SERIES
series->setUseOpenGL(false);
#else
series->setUseOpenGL(true);
#endif
chart->addSeries(series);
series->attachAxis(axisX);
series->attachAxis(axisY);
}
if (axisX->type() == QAbstractAxis::AxisTypeLogValue)
axisX->setRange(0.1, 20.0);
else
axisX->setRange(0, 20.0);
if (axisY->type() == QAbstractAxis::AxisTypeLogValue)
axisY->setRange(0.1, 10.0);
else
axisY->setRange(0, 10.0);
#ifdef ADD_SIMPLE_SERIES
QLineSeries *simpleRasterSeries = new QLineSeries;
*simpleRasterSeries << QPointF(0.001, 0.001)
<< QPointF(2.5, 8.0)
<< QPointF(5.0, 4.0)
<< QPointF(7.5, 9.0)
<< QPointF(10.0, 0.001)
<< QPointF(12.5, 2.0)
<< QPointF(15.0, 1.0)
<< QPointF(17.5, 6.0)
<< QPointF(20.0, 10.0);
simpleRasterSeries->setUseOpenGL(false);
simpleRasterSeries->setPen(QPen(QBrush("magenta"), 8));
chart->addSeries(simpleRasterSeries);
simpleRasterSeries->attachAxis(axisX);
simpleRasterSeries->attachAxis(axisY);
QLineSeries *simpleGLSeries = new QLineSeries;
simpleGLSeries->setUseOpenGL(true);
simpleGLSeries->setPen(QPen(QBrush("black"), 2));
simpleGLSeries->replace(simpleRasterSeries->points());
chart->addSeries(simpleGLSeries);
simpleGLSeries->attachAxis(axisX);
simpleGLSeries->attachAxis(axisY);
#endif
QChartView *chartView = new QChartView(chart);
QMainWindow window;
window.setCentralWidget(chartView);
window.resize(600, 400);
window.show();
DataSource dataSource;
dataSource.generateData(seriesCount, 10, pointCount);
QLabel *fpsLabel = new QLabel(&window);
QLabel *countLabel = new QLabel(&window);
QString countText = QStringLiteral("Total point count: %1");
countLabel->setText(countText.arg(pointCount * seriesCount));
countLabel->adjustSize();
fpsLabel->move(10, 2);
fpsLabel->adjustSize();
fpsLabel->raise();
fpsLabel->show();
countLabel->move(10, fpsLabel->height());
fpsLabel->raise();
countLabel->show();
QObject::connect(chart->scene(), &QGraphicsScene::changed,
&dataSource, &DataSource::handleSceneChanged);
dataSource.startUpdates(seriesList, fpsLabel);
return a.exec();
}