##// END OF EJS Templates
BarSet label brush is no longer reset to theme default brush if it was preset earlier
BarSet label brush is no longer reset to theme default brush if it was preset earlier

File last commit:

r1755:1a6e0b1256e1
r1760:10a2cce6b5a9
Show More
window.cpp
395 lines | 13.2 KiB | text/x-c | CppLexer
Michal Klocek
Adds chartviewer demo
r1746 /****************************************************************************
**
** Copyright (C) 2012 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 Commercial Charts Add-on.
**
** $QT_BEGIN_LICENSE$
** Licensees holding valid Qt Commercial licenses may use this file in
** accordance with the Qt Commercial 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$
**
****************************************************************************/
Michal Klocek
Adds scroll and zoom to chartviewer
r1748 #include "window.h"
#include "view.h"
Michal Klocek
Adds charts to chartsviewer
r1753 #include "charts.h"
Michal Klocek
Adds chartviewer demo
r1746 #include <QChartView>
#include <QAreaSeries>
#include <QLegend>
#include <QGridLayout>
#include <QFormLayout>
#include <QComboBox>
#include <QSpinBox>
#include <QCheckBox>
#include <QGroupBox>
#include <QLabel>
#include <QGraphicsScene>
#include <QGraphicsGridLayout>
#include <QGraphicsLinearLayout>
#include <QGraphicsProxyWidget>
#include <QGLWidget>
#include <QApplication>
#include <QDebug>
Michal Klocek
Adds scroll and zoom to chartviewer
r1748 Window::Window(QWidget* parent) :
QMainWindow(parent),
m_listCount(3),
m_valueMax(10),
m_valueCount(7),
m_scene(new QGraphicsScene(this)),
m_view(0),
Michal Klocek
Add horizontal charts to chartviewer
r1755 m_dataTable(Model::generateRandomData(m_listCount, m_valueMax, m_valueCount)),
Michal Klocek
Adds scroll and zoom to chartviewer
r1748 m_form(0),
m_themeComboBox(0),
m_antialiasCheckBox(0),
m_animatedComboBox(0),
m_legendComboBox(0),
m_openGLCheckBox(0),
m_zoomCheckBox(0),
m_scrollCheckBox(0),
m_rubberBand(new QGraphicsRectItem()),
m_isScrolling(false),
m_isZooming(false),
m_scroll(false),
m_zoom(false)
Michal Klocek
Adds chartviewer demo
r1746 {
createProxyWidgets();
connectSignals();
// create layout
QGraphicsGridLayout* baseLayout = new QGraphicsGridLayout();
QGraphicsLinearLayout *settingsLayout = new QGraphicsLinearLayout();
settingsLayout->setOrientation(Qt::Vertical);
settingsLayout->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
settingsLayout->addItem(m_widgetHash["openGLCheckBox"]);
settingsLayout->addItem(m_widgetHash["antialiasCheckBox"]);
settingsLayout->addItem(m_widgetHash["themeLabel"]);
settingsLayout->addItem(m_widgetHash["themeComboBox"]);
settingsLayout->addItem(m_widgetHash["animationsLabel"]);
settingsLayout->addItem(m_widgetHash["animatedComboBox"]);
settingsLayout->addItem(m_widgetHash["legendLabel"]);
settingsLayout->addItem(m_widgetHash["legendComboBox"]);
Michal Klocek
Adds scroll and zoom to chartviewer
r1748 settingsLayout->addItem(m_widgetHash["scrollCheckBox"]);
settingsLayout->addItem(m_widgetHash["zoomCheckBox"]);
Michal Klocek
Adds chartviewer demo
r1746 settingsLayout->addStretch();
baseLayout->addItem(settingsLayout, 0, 3, 2, 1);
//create charts
Michal Klocek
Adds charts to chartsviewer
r1753 Charts::ChartList list = Charts::chartList();
Michal Klocek
Adds chartviewer demo
r1746
Michal Klocek
Add horizontal charts to chartviewer
r1755 for(int i = 0 ; i < 9 && i<list.size() ; ++i)
Michal Klocek
Adds charts to chartsviewer
r1753 {
QChart* chart = list.at(i)->createChart(m_dataTable);
baseLayout->addItem(chart, i/3, i%3);
m_chartList << chart;
}
Michal Klocek
Adds chartviewer demo
r1746
m_form = new QGraphicsWidget();
m_form->setLayout(baseLayout);
m_scene->addItem(m_form);
Michal Klocek
Adds scroll and zoom to chartviewer
r1748 m_scene->addItem(m_rubberBand);
m_rubberBand->setVisible(false);
Michal Klocek
Adds chartviewer demo
r1746
Michal Klocek
Adds scroll and zoom to chartviewer
r1748 m_view = new View(m_scene, m_form);
Michal Klocek
Adds chartviewer demo
r1746 m_view->setMinimumSize(m_form->preferredSize().toSize());
Michal Klocek
Adds scroll and zoom to chartviewer
r1748 // Set defaults
m_antialiasCheckBox->setChecked(true);
Michal Klocek
Adds chartviewer demo
r1746 updateUI();
setCentralWidget(m_view);
}
Michal Klocek
Adds scroll and zoom to chartviewer
r1748 Window::~Window()
Michal Klocek
Adds chartviewer demo
r1746 {
}
Michal Klocek
Adds scroll and zoom to chartviewer
r1748 void Window::connectSignals()
Michal Klocek
Adds chartviewer demo
r1746 {
Michal Klocek
Fix layout issues with combobxes in chartsviewer
r1754 QObject::connect(m_themeComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(updateUI()));
QObject::connect(m_antialiasCheckBox, SIGNAL(toggled(bool)), this, SLOT(updateUI()));
QObject::connect(m_openGLCheckBox, SIGNAL(toggled(bool)), this, SLOT(updateUI()));
QObject::connect(m_zoomCheckBox, SIGNAL(toggled(bool)), this, SLOT(updateUI()));
QObject::connect(m_scrollCheckBox, SIGNAL(toggled(bool)), this, SLOT(updateUI()));
QObject::connect(m_animatedComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(updateUI()));
QObject::connect(m_legendComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(updateUI()));
Michal Klocek
Adds chartviewer demo
r1746 }
Michal Klocek
Adds scroll and zoom to chartviewer
r1748 void Window::createProxyWidgets()
Michal Klocek
Adds chartviewer demo
r1746 {
m_themeComboBox = createThemeBox();
m_antialiasCheckBox = new QCheckBox(tr("Anti-aliasing"));
m_animatedComboBox = createAnimationBox();
m_legendComboBox = createLegendBox();
m_openGLCheckBox = new QCheckBox(tr("OpenGL"));
Michal Klocek
Adds scroll and zoom to chartviewer
r1748 m_zoomCheckBox = new QCheckBox(tr("Zoom"));
m_scrollCheckBox = new QCheckBox(tr("Scroll"));
Michal Klocek
Adds chartviewer demo
r1746 m_widgetHash["themeComboBox"] = m_scene->addWidget(m_themeComboBox);
m_widgetHash["antialiasCheckBox"] = m_scene->addWidget(m_antialiasCheckBox);
m_widgetHash["animatedComboBox"] = m_scene->addWidget(m_animatedComboBox);
m_widgetHash["legendComboBox"] = m_scene->addWidget(m_legendComboBox);
m_widgetHash["openGLCheckBox"] = m_scene->addWidget(m_openGLCheckBox);
m_widgetHash["themeLabel"] = m_scene->addWidget(new QLabel("Theme"));
m_widgetHash["animationsLabel"] = m_scene->addWidget(new QLabel("Animations"));
m_widgetHash["legendLabel"] = m_scene->addWidget(new QLabel("Legend"));
Michal Klocek
Adds scroll and zoom to chartviewer
r1748 m_widgetHash["zoomCheckBox"] = m_scene->addWidget(m_zoomCheckBox);
m_widgetHash["scrollCheckBox"] = m_scene->addWidget(m_scrollCheckBox);
Michal Klocek
Adds chartviewer demo
r1746 }
Michal Klocek
Fix layout issues with combobxes in chartsviewer
r1754 QComboBox* Window::createThemeBox()
Michal Klocek
Adds chartviewer demo
r1746 {
// settings layoutQGLWidget’
Michal Klocek
Fix layout issues with combobxes in chartsviewer
r1754 QComboBox* themeComboBox = new ComboBox(this);
Michal Klocek
Adds chartviewer demo
r1746 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);
return themeComboBox;
}
Michal Klocek
Fix layout issues with combobxes in chartsviewer
r1754 QComboBox* Window::createAnimationBox()
Michal Klocek
Adds chartviewer demo
r1746 {
// settings layout
Michal Klocek
Fix layout issues with combobxes in chartsviewer
r1754 QComboBox* animationComboBox = new ComboBox(this);
Michal Klocek
Adds chartviewer demo
r1746 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;
}
Michal Klocek
Fix layout issues with combobxes in chartsviewer
r1754 QComboBox* Window::createLegendBox()
Michal Klocek
Adds chartviewer demo
r1746 {
Michal Klocek
Fix layout issues with combobxes in chartsviewer
r1754 QComboBox* legendComboBox = new ComboBox(this);
Michal Klocek
Adds chartviewer demo
r1746 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;
}
Michal Klocek
Adds scroll and zoom to chartviewer
r1748 void Window::updateUI()
Michal Klocek
Adds chartviewer demo
r1746 {
bool opengl = m_openGLCheckBox->isChecked();
bool isOpengl = qobject_cast<QGLWidget*>(m_view->viewport());
if ((isOpengl && !opengl) || (!isOpengl && opengl)) {
m_view->deleteLater();
Michal Klocek
Adds scroll and zoom to chartviewer
r1748 m_view = new View(m_scene, m_form);
Michal Klocek
Adds chartviewer demo
r1746 m_view->setViewport(!opengl ? new QWidget() : new QGLWidget());
setCentralWidget(m_view);
}
QChart::ChartTheme theme = (QChart::ChartTheme) m_themeComboBox->itemData(
m_themeComboBox->currentIndex()).toInt();
foreach (QChart *chart, m_chartList)
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));
}
foreach(QGraphicsProxyWidget* widget , m_widgetHash) {
widget->setPalette(pal);
}
m_view->setBackgroundBrush(pal.color((QPalette::Window)));
Michal Klocek
Adds scroll and zoom to chartviewer
r1748 m_rubberBand->setPen(pal.color((QPalette::WindowText)));
Michal Klocek
Adds chartviewer demo
r1746
QChart::AnimationOptions options(
m_animatedComboBox->itemData(m_animatedComboBox->currentIndex()).toInt());
Michal Klocek
Adds charts to chartsviewer
r1753 if (!m_chartList.isEmpty() && m_chartList.at(0)->animationOptions() != options) {
Michal Klocek
Adds chartviewer demo
r1746 foreach (QChart *chart, m_chartList)
chart->setAnimationOptions(options);
}
Qt::Alignment alignment(m_legendComboBox->itemData(m_legendComboBox->currentIndex()).toInt());
if (!alignment) {
foreach (QChart *chart, m_chartList) {
chart->legend()->hide();
}
}
else {
foreach (QChart *chart, m_chartList) {
chart->legend()->setAlignment(alignment);
chart->legend()->show();
}
}
Michal Klocek
Adds scroll and zoom to chartviewer
r1748 bool antialias = m_antialiasCheckBox->isChecked();
Michal Klocek
Adds chartviewer demo
r1746 if (opengl)
Michal Klocek
Adds scroll and zoom to chartviewer
r1748 m_view->setRenderHint(QPainter::HighQualityAntialiasing, antialias);
Michal Klocek
Adds chartviewer demo
r1746 else
Michal Klocek
Adds scroll and zoom to chartviewer
r1748 m_view->setRenderHint(QPainter::Antialiasing, antialias);
bool scroll = m_scrollCheckBox->isChecked();
if(!m_scroll & scroll){
m_scroll=true;
m_zoom=false;
m_zoomCheckBox->setChecked(false);
}
bool zoom = m_zoomCheckBox->isChecked();
if(!m_zoom & zoom){
m_scroll=false;
m_zoom=true;
m_scrollCheckBox->setChecked(false);
}
}
void Window::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton) {
m_origin = event->pos();
m_isScrolling = false;
m_isZooming = false;
foreach (QChart *chart, m_chartList) {
QRectF geometryRect = chart->geometry();
QRectF plotArea = chart->plotArea();
plotArea.translate(geometryRect.topLeft());
if (plotArea.contains(m_origin)) {
m_isScrolling = m_scroll;
m_isZooming = m_zoom;
break;
}
}
if (m_isZooming) {
m_rubberBand->setRect(QRectF(m_origin, QSize()));
m_rubberBand->setVisible(true);
}
event->accept();
}
if (event->button() == Qt::RightButton) {
m_origin = event->pos();
m_isZooming = m_zoom;
}
}
void Window::mouseMoveEvent(QMouseEvent *event)
{
if (m_isScrolling || m_isZooming) {
foreach (QChart *chart, m_chartList) {
QRectF geometryRect = chart->geometry();
QRectF plotArea = chart->plotArea();
plotArea.translate(geometryRect.topLeft());
if (plotArea.contains(m_origin)) {
if (m_isScrolling) {
QPointF delta = m_origin - event->pos();
chart->scroll(delta.x(), -delta.y());
}
if (m_isZooming && plotArea.contains(event->pos())) {
m_rubberBand->setRect(QRectF(m_origin, event->pos()).normalized());
}
break;
}
}
if(m_isScrolling) m_origin = event->pos();
event->accept();
}
Michal Klocek
Adds chartviewer demo
r1746 }
Michal Klocek
Adds scroll and zoom to chartviewer
r1748 void Window::mouseReleaseEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton) {
m_isScrolling = false;
if (m_isZooming) {
m_isZooming = false;
m_rubberBand->setVisible(false);
foreach (QChart *chart, m_chartList) {
QRectF geometryRect = chart->geometry();
QRectF plotArea = chart->plotArea();
plotArea.translate(geometryRect.topLeft());
if (plotArea.contains(m_origin)) {
QRectF rect = m_rubberBand->rect();
Michal Klocek
Fix zoom in chartviewer
r1751 rect.translate(-geometryRect.topLeft());
Michal Klocek
Adds scroll and zoom to chartviewer
r1748 chart->zoomIn(rect);
break;
}
}
}
event->accept();
}
if (event->button() == Qt::RightButton) {
if (m_isZooming) {
foreach (QChart *chart, m_chartList) {
QRectF geometryRect = chart->geometry();
QRectF plotArea = chart->plotArea();
plotArea.translate(geometryRect.topLeft());
if (plotArea.contains(m_origin)) {
QRectF rect = m_rubberBand->rect();
chart->zoomOut();
break;
}
}
}
}
}
Michal Klocek
Fix layout issues with combobxes in chartsviewer
r1754
void Window::comboBoxFocused(QComboBox *combobox)
{
foreach(QGraphicsProxyWidget* widget , m_widgetHash) {
if(widget->widget()==combobox)
widget->setZValue(2.0);
else
widget->setZValue(0.0);
}
}