diff options
author | Titta Heikkala <titta.heikkala@digia.com> | 2014-07-01 07:10:00 +0300 |
---|---|---|
committer | Titta Heikkala <titta.heikkala@theqtcompany.com> | 2014-10-14 13:04:52 +0300 |
commit | c544258484ff4fd5d2b88402fbaa5d154b89a3a2 (patch) | |
tree | 7659625abb566dec55d3783ed820b928542d9b2b /examples/charts/chartthemes | |
parent | 76339f714f088645e911cee65bdb66055fe029aa (diff) |
Qt Charts project file structure change
Charts repository structure is changed to follow the structure of a
Qt Add-On module. The task includes following changes:
- All macros and definitions named 'commercial' have been renamed.
- Compile errors related to QString and qSort usage have been fixed.
- Old demos are moved under examples. The QML examples now support only
Qt Quick 2.0, the support for Qt Quick 1 is removed.
- The QML examples with multiple views are updated so that they are
usable also with touch devices.
- Unnecessary version checks are removed from examples.
- The build stamp has been removed as it was only meant for Charts
development purposes and it's no longer needed. Also development
build related debug prints are removed as __DATE__ can't be used
for all OS thus it doesn't make much sense.
- Documentation structure has been updated based on the new module
structure. The raw HTML files have been removed. Demos are
combined to examples.
- Unnecessary .qdocinc files are no longer needed. The content is
moved to the corresponding .cpp files.
- The Charts widget designer plugin is updated according to the module
change.
- The test cases updated according to the project structure change.
Tests are added also for version 2.0.
- cmake modules generation is not needed with Qt 5.4 and Qt Charts
so it's disabled.
- The new module name and version are updated to the plugin.qmltypes
file.
Task-number: QTRD-2844, QTRD-3217, QTRD-3218, QTRD-3277, QTRD-3228,
QTRD-2526, QTRD-3233, QTRD-3222
Change-Id: Ib7fb26057cde710ffaf6bc780c8bf52a16f45160
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@theqtcompany.com>
Diffstat (limited to 'examples/charts/chartthemes')
-rw-r--r-- | examples/charts/chartthemes/chartthemes.pro | 7 | ||||
-rw-r--r-- | examples/charts/chartthemes/main.cpp | 35 | ||||
-rw-r--r-- | examples/charts/chartthemes/themewidget.cpp | 372 | ||||
-rw-r--r-- | examples/charts/chartthemes/themewidget.h | 77 |
4 files changed, 491 insertions, 0 deletions
diff --git a/examples/charts/chartthemes/chartthemes.pro b/examples/charts/chartthemes/chartthemes.pro new file mode 100644 index 00000000..2a414557 --- /dev/null +++ b/examples/charts/chartthemes/chartthemes.pro @@ -0,0 +1,7 @@ +!include( ../examples.pri ) { + error( "Couldn't find the examples.pri file!" ) +} + +TARGET = chartthemes +SOURCES = main.cpp themewidget.cpp +HEADERS = themewidget.h diff --git a/examples/charts/chartthemes/main.cpp b/examples/charts/chartthemes/main.cpp new file mode 100644 index 00000000..5bc1af84 --- /dev/null +++ b/examples/charts/chartthemes/main.cpp @@ -0,0 +1,35 @@ +/**************************************************************************** +** +** Copyright (C) 2014 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 Enterprise Charts Add-on. +** +** $QT_BEGIN_LICENSE$ +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise 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 "themewidget.h" +#include <QApplication> +#include <QMainWindow> + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + QMainWindow window; + ThemeWidget *widget = new ThemeWidget(); + window.setCentralWidget(widget); + window.resize(900, 600); + window.show(); + return a.exec(); +} + diff --git a/examples/charts/chartthemes/themewidget.cpp b/examples/charts/chartthemes/themewidget.cpp new file mode 100644 index 00000000..d1b0051b --- /dev/null +++ b/examples/charts/chartthemes/themewidget.cpp @@ -0,0 +1,372 @@ +/**************************************************************************** +** +** Copyright (C) 2014 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 Enterprise Charts Add-on. +** +** $QT_BEGIN_LICENSE$ +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise 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 "themewidget.h" + +#include <QChartView> +#include <QPieSeries> +#include <QPieSlice> +#include <QAbstractBarSeries> +#include <QPercentBarSeries> +#include <QStackedBarSeries> +#include <QBarSeries> +#include <QBarSet> +#include <QLineSeries> +#include <QSplineSeries> +#include <QScatterSeries> +#include <QAreaSeries> +#include <QLegend> +#include <QGridLayout> +#include <QFormLayout> +#include <QComboBox> +#include <QSpinBox> +#include <QCheckBox> +#include <QGroupBox> +#include <QLabel> +#include <QTime> +#include <QBarCategoryAxis> + +ThemeWidget::ThemeWidget(QWidget *parent) : + QWidget(parent), + m_listCount(3), + m_valueMax(10), + m_valueCount(7), + m_dataTable(generateRandomData(m_listCount, m_valueMax, m_valueCount)), + m_themeComboBox(createThemeBox()), + m_antialiasCheckBox(new QCheckBox("Anti-aliasing")), + m_animatedComboBox(createAnimationBox()), + m_legendComboBox(createLegendBox()) +{ + connectSignals(); + // create layout + QGridLayout *baseLayout = new QGridLayout(); + QHBoxLayout *settingsLayout = new QHBoxLayout(); + settingsLayout->addWidget(new QLabel("Theme:")); + settingsLayout->addWidget(m_themeComboBox); + settingsLayout->addWidget(new QLabel("Animation:")); + settingsLayout->addWidget(m_animatedComboBox); + settingsLayout->addWidget(new QLabel("Legend:")); + settingsLayout->addWidget(m_legendComboBox); + settingsLayout->addWidget(m_antialiasCheckBox); + settingsLayout->addStretch(); + baseLayout->addLayout(settingsLayout, 0, 0, 1, 3); + + //create charts + + QChartView *chartView; + + chartView = new QChartView(createAreaChart()); + baseLayout->addWidget(chartView, 1, 0); + m_charts << chartView; + + chartView = new QChartView(createBarChart(m_valueCount)); + baseLayout->addWidget(chartView, 1, 1); + m_charts << chartView; + + chartView = new QChartView(createLineChart()); + baseLayout->addWidget(chartView, 1, 2); + m_charts << chartView; + + chartView = new QChartView(createPieChart()); + chartView->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored); // funny things happen if the pie slice labels no not fit the screen... + baseLayout->addWidget(chartView, 2, 0); + m_charts << chartView; + + chartView = new QChartView(createSplineChart()); + baseLayout->addWidget(chartView, 2, 1); + m_charts << chartView; + + chartView = new QChartView(createScatterChart()); + baseLayout->addWidget(chartView, 2, 2); + m_charts << chartView; + + setLayout(baseLayout); + + // Set defaults + m_antialiasCheckBox->setChecked(true); + updateUI(); +} + +ThemeWidget::~ThemeWidget() +{ +} + +void ThemeWidget::connectSignals() +{ + connect(m_themeComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(updateUI())); + connect(m_antialiasCheckBox, SIGNAL(toggled(bool)), this, SLOT(updateUI())); + connect(m_animatedComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(updateUI())); + connect(m_legendComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(updateUI())); +} + +DataTable ThemeWidget::generateRandomData(int listCount, int valueMax, int valueCount) const +{ + DataTable dataTable; + + // set seed for random stuff + qsrand(QTime(0, 0, 0).secsTo(QTime::currentTime())); + + // generate random data + for (int i(0); i < listCount; i++) { + DataList dataList; + qreal yValue(0); + for (int j(0); j < valueCount; j++) { + yValue = yValue + (qreal)(qrand() % valueMax) / (qreal) valueCount; + QPointF value((j + (qreal) rand() / (qreal) RAND_MAX) * ((qreal) m_valueMax / (qreal) valueCount), + yValue); + QString label = "Slice " + QString::number(i) + ":" + QString::number(j); + dataList << Data(value, label); + } + dataTable << dataList; + } + + return dataTable; +} + +QComboBox *ThemeWidget::createThemeBox() const +{ + // settings layout + QComboBox *themeComboBox = new QComboBox(); + themeComboBox->addItem("Light", QChart::ChartThemeLight); + themeComboBox->addItem("Blue Cerulean", QChart::ChartThemeBlueCerulean); + themeComboBox->addItem("Dark", QChart::ChartThemeDark); + themeComboBox->addItem("Brown Sand", QChart::ChartThemeBrownSand); + themeComboBox->addItem("Blue NCS", QChart::ChartThemeBlueNcs); + themeComboBox->addItem("High Contrast", QChart::ChartThemeHighContrast); + themeComboBox->addItem("Blue Icy", QChart::ChartThemeBlueIcy); + themeComboBox->addItem("Qt", QChart::ChartThemeQt); + return themeComboBox; +} + +QComboBox *ThemeWidget::createAnimationBox() const +{ + // settings layout + QComboBox *animationComboBox = new QComboBox(); + animationComboBox->addItem("No Animations", QChart::NoAnimation); + animationComboBox->addItem("GridAxis Animations", QChart::GridAxisAnimations); + animationComboBox->addItem("Series Animations", QChart::SeriesAnimations); + animationComboBox->addItem("All Animations", QChart::AllAnimations); + return animationComboBox; +} + +QComboBox *ThemeWidget::createLegendBox() const +{ + QComboBox *legendComboBox = new QComboBox(); + legendComboBox->addItem("No Legend ", 0); + legendComboBox->addItem("Legend Top", Qt::AlignTop); + legendComboBox->addItem("Legend Bottom", Qt::AlignBottom); + legendComboBox->addItem("Legend Left", Qt::AlignLeft); + legendComboBox->addItem("Legend Right", Qt::AlignRight); + return legendComboBox; +} + +QChart *ThemeWidget::createAreaChart() const +{ + QChart *chart = new QChart(); + chart->setTitle("Area chart"); + + // The lower series initialized to zero values + QLineSeries *lowerSeries = 0; + QString name("Series "); + int nameIndex = 0; + for (int i(0); i < m_dataTable.count(); i++) { + QLineSeries *upperSeries = new QLineSeries(chart); + for (int j(0); j < m_dataTable[i].count(); j++) { + Data data = m_dataTable[i].at(j); + if (lowerSeries) { + const QList<QPointF>& points = lowerSeries->points(); + upperSeries->append(QPointF(j, points[i].y() + data.first.y())); + } else { + upperSeries->append(QPointF(j, data.first.y())); + } + } + QAreaSeries *area = new QAreaSeries(upperSeries, lowerSeries); + area->setName(name + QString::number(nameIndex)); + nameIndex++; + chart->addSeries(area); + chart->createDefaultAxes(); + lowerSeries = upperSeries; + } + + return chart; +} + +QChart *ThemeWidget::createBarChart(int valueCount) const +{ + Q_UNUSED(valueCount); + QChart *chart = new QChart(); + chart->setTitle("Bar chart"); + + QStackedBarSeries *series = new QStackedBarSeries(chart); + for (int i(0); i < m_dataTable.count(); i++) { + QBarSet *set = new QBarSet("Bar set " + QString::number(i)); + foreach (Data data, m_dataTable[i]) + *set << data.first.y(); + series->append(set); + } + chart->addSeries(series); + chart->createDefaultAxes(); + + return chart; +} + +QChart *ThemeWidget::createLineChart() const +{ + QChart *chart = new QChart(); + chart->setTitle("Line chart"); + + QString name("Series "); + int nameIndex = 0; + foreach (DataList list, m_dataTable) { + QLineSeries *series = new QLineSeries(chart); + foreach (Data data, list) + series->append(data.first); + series->setName(name + QString::number(nameIndex)); + nameIndex++; + chart->addSeries(series); + } + chart->createDefaultAxes(); + + return chart; +} + +QChart *ThemeWidget::createPieChart() const +{ + QChart *chart = new QChart(); + chart->setTitle("Pie chart"); + + qreal pieSize = 1.0 / m_dataTable.count(); + for (int i = 0; i < m_dataTable.count(); i++) { + QPieSeries *series = new QPieSeries(chart); + foreach (Data data, m_dataTable[i]) { + QPieSlice *slice = series->append(data.second, data.first.y()); + if (data == m_dataTable[i].first()) { + slice->setLabelVisible(); + slice->setExploded(); + } + } + qreal hPos = (pieSize / 2) + (i / (qreal) m_dataTable.count()); + series->setPieSize(pieSize); + series->setHorizontalPosition(hPos); + series->setVerticalPosition(0.5); + chart->addSeries(series); + } + + return chart; +} + +QChart *ThemeWidget::createSplineChart() const +{ + // spine chart + QChart *chart = new QChart(); + chart->setTitle("Spline chart"); + QString name("Series "); + int nameIndex = 0; + foreach (DataList list, m_dataTable) { + QSplineSeries *series = new QSplineSeries(chart); + foreach (Data data, list) + series->append(data.first); + series->setName(name + QString::number(nameIndex)); + nameIndex++; + chart->addSeries(series); + } + chart->createDefaultAxes(); + return chart; +} + +QChart *ThemeWidget::createScatterChart() const +{ + // scatter chart + QChart *chart = new QChart(); + chart->setTitle("Scatter chart"); + QString name("Series "); + int nameIndex = 0; + foreach (DataList list, m_dataTable) { + QScatterSeries *series = new QScatterSeries(chart); + foreach (Data data, list) + series->append(data.first); + series->setName(name + QString::number(nameIndex)); + nameIndex++; + chart->addSeries(series); + } + chart->createDefaultAxes(); + return chart; +} + +void ThemeWidget::updateUI() +{ + QChart::ChartTheme theme = (QChart::ChartTheme) m_themeComboBox->itemData(m_themeComboBox->currentIndex()).toInt(); + + if (m_charts.at(0)->chart()->theme() != theme) { + foreach (QChartView *chartView, m_charts) + chartView->chart()->setTheme(theme); + + QPalette pal = window()->palette(); + if (theme == QChart::ChartThemeLight) { + pal.setColor(QPalette::Window, QRgb(0xf0f0f0)); + pal.setColor(QPalette::WindowText, QRgb(0x404044)); + } else if (theme == QChart::ChartThemeDark) { + pal.setColor(QPalette::Window, QRgb(0x121218)); + pal.setColor(QPalette::WindowText, QRgb(0xd6d6d6)); + } else if (theme == QChart::ChartThemeBlueCerulean) { + pal.setColor(QPalette::Window, QRgb(0x40434a)); + pal.setColor(QPalette::WindowText, QRgb(0xd6d6d6)); + } else if (theme == QChart::ChartThemeBrownSand) { + pal.setColor(QPalette::Window, QRgb(0x9e8965)); + pal.setColor(QPalette::WindowText, QRgb(0x404044)); + } else if (theme == QChart::ChartThemeBlueNcs) { + pal.setColor(QPalette::Window, QRgb(0x018bba)); + pal.setColor(QPalette::WindowText, QRgb(0x404044)); + } else if (theme == QChart::ChartThemeHighContrast) { + pal.setColor(QPalette::Window, QRgb(0xffab03)); + pal.setColor(QPalette::WindowText, QRgb(0x181818)); + } else if (theme == QChart::ChartThemeBlueIcy) { + pal.setColor(QPalette::Window, QRgb(0xcee7f0)); + pal.setColor(QPalette::WindowText, QRgb(0x404044)); + } else { + pal.setColor(QPalette::Window, QRgb(0xf0f0f0)); + pal.setColor(QPalette::WindowText, QRgb(0x404044)); + } + window()->setPalette(pal); + } + + bool checked = m_antialiasCheckBox->isChecked(); + foreach (QChartView *chart, m_charts) + chart->setRenderHint(QPainter::Antialiasing, checked); + + QChart::AnimationOptions options(m_animatedComboBox->itemData(m_animatedComboBox->currentIndex()).toInt()); + if (m_charts.at(0)->chart()->animationOptions() != options) { + foreach (QChartView *chartView, m_charts) + chartView->chart()->setAnimationOptions(options); + } + + Qt::Alignment alignment(m_legendComboBox->itemData(m_legendComboBox->currentIndex()).toInt()); + + if (!alignment) { + foreach (QChartView *chartView, m_charts) + chartView->chart()->legend()->hide(); + } else { + foreach (QChartView *chartView, m_charts) { + chartView->chart()->legend()->setAlignment(alignment); + chartView->chart()->legend()->show(); + } + } +} + diff --git a/examples/charts/chartthemes/themewidget.h b/examples/charts/chartthemes/themewidget.h new file mode 100644 index 00000000..d1a4d997 --- /dev/null +++ b/examples/charts/chartthemes/themewidget.h @@ -0,0 +1,77 @@ +/**************************************************************************** +** +** Copyright (C) 2014 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 Enterprise Charts Add-on. +** +** $QT_BEGIN_LICENSE$ +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise 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$ +** +****************************************************************************/ + +#ifndef THEMEWIDGET_H +#define THEMEWIDGET_H + +#include <QWidget> +#include <QChartGlobal> + +class QComboBox; +class QCheckBox; + +QT_CHARTS_BEGIN_NAMESPACE +class QChartView; +class QChart; +QT_CHARTS_END_NAMESPACE + +typedef QPair<QPointF, QString> Data; +typedef QList<Data> DataList; +typedef QList<DataList> DataTable; + +QT_CHARTS_USE_NAMESPACE + +class ThemeWidget: public QWidget +{ + Q_OBJECT +public: + explicit ThemeWidget(QWidget *parent = 0); + ~ThemeWidget(); + +private Q_SLOTS: + void updateUI(); + +private: + DataTable generateRandomData(int listCount, int valueMax, int valueCount) const; + QComboBox *createThemeBox() const; + QComboBox *createAnimationBox() const; + QComboBox *createLegendBox() const; + void connectSignals(); + QChart *createAreaChart() const; + QChart *createBarChart(int valueCount) const; + QChart *createPieChart() const; + QChart *createLineChart() const; + QChart *createSplineChart() const; + QChart *createScatterChart() const; + +private: + int m_listCount; + int m_valueMax; + int m_valueCount; + QList<QChartView *> m_charts; + DataTable m_dataTable; + + QComboBox *m_themeComboBox; + QCheckBox *m_antialiasCheckBox; + QComboBox *m_animatedComboBox; + QComboBox *m_legendComboBox; +}; + +#endif /* THEMEWIDGET_H */ |