##// END OF EJS Templates
Fixes to model support
Fixes to model support

File last commit:

r1060:9efd7b220dc4
r1060:9efd7b220dc4
Show More
tablewidget.cpp
375 lines | 15.0 KiB | text/x-c | CppLexer
Jani Honkonen
Add/modify license headers
r830 /****************************************************************************
**
** 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$
**
****************************************************************************/
Marek Rosa
Table model data example
r519 #include "tablewidget.h"
#include <QGridLayout>
#include <QTableView>
Marek Rosa
PieSeries: model now supports custom mapping.
r1056 #include <QChart>
Marek Rosa
Table model data example
r519 #include <QStyledItemDelegate>
Marek Rosa
tablemodelchart: added coloring to TableView
r849 #include <QLineSeries>
#include <QSplineSeries>
#include <QScatterSeries>
Marek Rosa
Table model data example
r519 #include "customtablemodel.h"
Marek Rosa
tablemodelchart: added coloring to TableView
r849 #include <QPieSeries>
#include <QPieSlice>
#include <QAreaSeries>
#include <QBarSeries>
#include <QBarSet>
Marek Rosa
Added support for adding and removing data with model. Updated the example
r545 #include <QPushButton>
#include <QRadioButton>
Marek Rosa
tablemodelchart: axes re-enabled on toggle (pie disables them)
r878 #include <QLabel>
Marek Rosa
Some more work on mapping with limits
r735 #include <QSpinBox>
Marek Rosa
Added support for data from model to QBarSeries. Various fixes and small modifications to data from model support to other series
r630 #include <QTime>
Marek Rosa
Table model data example
r519
TableWidget::TableWidget(QWidget *parent)
Marek Rosa
PieSeries: model now supports custom mapping.
r1056 : QWidget(parent),specialPie(0)
Marek Rosa
Table model data example
r519 {
Marek Rosa
PieSeries: model now supports custom mapping.
r1056 setGeometry(1900, 100, 1000, 600);
Marek Rosa
Added support for data from model to QBarSeries. Various fixes and small modifications to data from model support to other series
r630 qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
Marek Rosa
Table model data example
r519 // create simple model for storing data
// user's table data model
Marek Rosa
Added support for adding and removing data with model. Updated the example
r545 m_model = new CustomTableModel;
Marek Rosa
XYSeries model with limits working.
r833 m_tableView = new QTableView;
m_tableView->setModel(m_model);
Marek Rosa
Small updates to tablemodelchart example
r861 m_tableView->setMinimumHeight(300);
Marek Rosa
tablemodelchart: added coloring to TableView
r849 // tableView->setMinimumSize(340, 480);
// tableView->setItemDelegate(new QStyledItemDelegate);
Marek Rosa
XYSeries model with limits working.
r833 m_chart = new QChart;
Marek Rosa
For BarChart labels for legend are now taken from model's headerData (row or column)
r1012 m_chart->legend()->setVisible(true);
Marek Rosa
Fixes to model support
r1060 // m_chart->setAnimationOptions(QChart::SeriesAnimations);
Marek Rosa
XYSeries model with limits working.
r833 m_chartView = new QChartView(m_chart);
m_chartView->setRenderHint(QPainter::Antialiasing);
m_chartView->setMinimumSize(640, 480);
Marek Rosa
Table model data example
r519
Marek Rosa
Added support for adding and removing data with model. Updated the example
r545 // add, remove data buttons
Marek Rosa
Model data example updated
r546 QPushButton* addRowAboveButton = new QPushButton("Add row above");
connect(addRowAboveButton, SIGNAL(clicked()), this, SLOT(addRowAbove()));
QPushButton* addRowBelowButton = new QPushButton("Add row below");
connect(addRowBelowButton, SIGNAL(clicked()), this, SLOT(addRowBelow()));
Marek Rosa
Added support for adding and removing data with model. Updated the example
r545
QPushButton* removeRowButton = new QPushButton("Remove row");
connect(removeRowButton, SIGNAL(clicked()), this, SLOT(removeRow()));
Marek Rosa
PieSeries: model now supports custom mapping.
r1056 QPushButton* specialPieButton = new QPushButton("Test pie");
connect(specialPieButton, SIGNAL(clicked()), this, SLOT(testPie()));
Marek Rosa
tablemodelchart: axes re-enabled on toggle (pie disables them)
r878 QLabel *spinBoxLabel = new QLabel("Rows affected:");
Marek Rosa
BarSeries - renamed internal model getter to modelInternal. Some smaller changes to other files to have in headers forward declarations for model related members instead of include
r877 // spin box for setting number of affected items (add, remove)
Marek Rosa
XYSeries model with limits working.
r833 m_linesCountSpinBox = new QSpinBox;
m_linesCountSpinBox->setRange(1, 10);
m_linesCountSpinBox->setValue(1);
Marek Rosa
Some more work on mapping with limits
r735
Marek Rosa
Added support for adding and removing data with model. Updated the example
r545 // buttons layout
QVBoxLayout* buttonsLayout = new QVBoxLayout;
Marek Rosa
tablemodelchart: axes re-enabled on toggle (pie disables them)
r878 buttonsLayout->addWidget(spinBoxLabel);
Marek Rosa
XYSeries model with limits working.
r833 buttonsLayout->addWidget(m_linesCountSpinBox);
Marek Rosa
Model data example updated
r546 buttonsLayout->addWidget(addRowAboveButton);
buttonsLayout->addWidget(addRowBelowButton);
Marek Rosa
Added support for adding and removing data with model. Updated the example
r545 buttonsLayout->addWidget(removeRowButton);
Marek Rosa
PieSeries: model now supports custom mapping.
r1056 buttonsLayout->addWidget(specialPieButton);
Marek Rosa
Added support for adding and removing data with model. Updated the example
r545 buttonsLayout->addStretch();
// chart type radio buttons
Marek Rosa
XYSeries model with limits working.
r833 m_lineRadioButton = new QRadioButton("Line");
m_splineRadioButton = new QRadioButton("Spline");
m_scatterRadioButton = new QRadioButton("Scatter");
m_pieRadioButton = new QRadioButton("Pie");
m_areaRadioButton = new QRadioButton("Area");
m_barRadioButton = new QRadioButton("Bar");
Marek Rosa
tablemodelchart: axes re-enabled on toggle (pie disables them)
r878 connect(m_lineRadioButton, SIGNAL(toggled(bool)), this, SLOT(updateChartType(bool)));
connect(m_splineRadioButton, SIGNAL(toggled(bool)), this, SLOT(updateChartType(bool)));
connect(m_scatterRadioButton, SIGNAL(toggled(bool)), this, SLOT(updateChartType(bool)));
connect(m_pieRadioButton, SIGNAL(toggled(bool)), this, SLOT(updateChartType(bool)));
connect(m_areaRadioButton, SIGNAL(toggled(bool)), this, SLOT(updateChartType(bool)));
connect(m_barRadioButton, SIGNAL(toggled(bool)), this, SLOT(updateChartType(bool)));
Marek Rosa
XYSeries model with limits working.
r833 m_lineRadioButton->setChecked(true);
Marek Rosa
Added support for adding and removing data with model. Updated the example
r545
// radio buttons layout
Marek Rosa
Added support for data from model to QBarSeries. Various fixes and small modifications to data from model support to other series
r630 QVBoxLayout* radioLayout = new QVBoxLayout;
Marek Rosa
XYSeries model with limits working.
r833 radioLayout->addWidget(m_lineRadioButton);
radioLayout->addWidget(m_splineRadioButton);
radioLayout->addWidget(m_scatterRadioButton);
radioLayout->addWidget(m_pieRadioButton);
radioLayout->addWidget(m_areaRadioButton);
radioLayout->addWidget(m_barRadioButton);
Marek Rosa
Added support for data from model to QBarSeries. Various fixes and small modifications to data from model support to other series
r630 radioLayout->addStretch();
Marek Rosa
Table model data example
r519
// create main layout
QGridLayout* mainLayout = new QGridLayout;
Marek Rosa
XYSeries model with limits working.
r833 mainLayout->addLayout(buttonsLayout, 1, 1);
mainLayout->addLayout(radioLayout, 2, 1);
mainLayout->addWidget(m_tableView, 1, 0);
mainLayout->addWidget(m_chartView, 2, 0);
Marek Rosa
tablemodelchart: added coloring to TableView
r849 setLayout(mainLayout);
Marek Rosa
XYSeries model with limits working.
r833 m_lineRadioButton->setFocus();
Marek Rosa
Added support for adding and removing data with model. Updated the example
r545 }
Marek Rosa
Model data example updated
r546 void TableWidget::addRowAbove()
{
Marek Rosa
XYSeries model with limits working.
r833 m_model->insertRows(m_tableView->currentIndex().row(), m_linesCountSpinBox->value());
Marek Rosa
Model data example updated
r546
}
void TableWidget::addRowBelow()
Marek Rosa
Added support for adding and removing data with model. Updated the example
r545 {
Marek Rosa
XYSeries model with limits working.
r833 m_model->insertRows(m_tableView->currentIndex().row() + 1, m_linesCountSpinBox->value());
Marek Rosa
Added support for adding and removing data with model. Updated the example
r545
}
void TableWidget::removeRow()
{
Marek Rosa
XYSeries model with limits working.
r833 m_model->removeRows(m_tableView->currentIndex().row(), qMin(m_model->rowCount() - m_tableView->currentIndex().row(), m_linesCountSpinBox->value()));
Marek Rosa
Added support for adding and removing data with model. Updated the example
r545 }
Marek Rosa
tablemodelchart: axes re-enabled on toggle (pie disables them)
r878 void TableWidget::updateChartType(bool toggle)
Marek Rosa
Added support for adding and removing data with model. Updated the example
r545 {
Marek Rosa
tablemodelchart: axes re-enabled on toggle (pie disables them)
r878 // this if is needed, so that the function is only called once.
// For the radioButton that was enabled.
if (toggle) {
Marek Rosa
PieSeries: model now supports custom mapping.
r1056 specialPie = 0;
m_chart->removeAllSeries();
Marek Rosa
For BarChart labels for legend are now taken from model's headerData (row or column)
r1012 m_chart->axisX()->setNiceNumbersEnabled(false);
m_chart->axisY()->setNiceNumbersEnabled(false);
Marek Rosa
tablemodelchart: axes re-enabled on toggle (pie disables them)
r878
// renable axes of the chart (pie hides them)
// x axis
Michal Klocek
Changes QChartAxis -> QAxis
r1006 QAxis *axis = m_chart->axisX();
Marek Rosa
tablemodelchart: axes re-enabled on toggle (pie disables them)
r878 axis->setAxisVisible(true);
axis->setGridLineVisible(true);
axis->setLabelsVisible(true);
// y axis
axis = m_chart->axisY();
axis->setAxisVisible(true);
axis->setGridLineVisible(true);
axis->setLabelsVisible(true);
m_model->clearMapping();
QString seriesColorHex = "#000000";
QPen pen;
pen.setWidth(2);
if (m_lineRadioButton->isChecked())
{
// series 1
m_series = new QLineSeries;
m_series->setModel(m_model);
m_series->setModelMapping(0,1, Qt::Vertical);
Marek Rosa
QXYSeries: support for adding data to model when using custom mapping
r1054 m_series->setModelMappingRange(4, 4);
Marek Rosa
tablemodelchart: axes re-enabled on toggle (pie disables them)
r878 m_chart->addSeries(m_series);
seriesColorHex = "#" + QString::number(m_series->pen().color().rgb(), 16).right(6).toUpper();
Marek Rosa
QXYSeries: support for adding data to model when using custom mapping
r1054 m_model->addMapping(seriesColorHex, QRect(0, 4, 2, 4));
Marek Rosa
tablemodelchart: axes re-enabled on toggle (pie disables them)
r878
// series 2
m_series = new QLineSeries;
m_series->setModel(m_model);
m_series->setModelMapping(2,3, Qt::Vertical);
m_chart->addSeries(m_series);
seriesColorHex = "#" + QString::number(m_series->pen().color().rgb(), 16).right(6).toUpper();
m_model->addMapping(seriesColorHex, QRect(2, 0, 2, 1000));
// series 3
m_series = new QLineSeries;
m_series->setModel(m_model);
m_series->setModelMapping(4,5, Qt::Vertical);
Marek Rosa
QXYSeries: support for adding data to model when using custom mapping
r1054 m_series->setModelMappingRange(2, -1);
Marek Rosa
tablemodelchart: axes re-enabled on toggle (pie disables them)
r878 m_chart->addSeries(m_series);
seriesColorHex = "#" + QString::number(m_series->pen().color().rgb(), 16).right(6).toUpper();
m_model->addMapping(seriesColorHex, QRect(4, 2, 2, 1000));
}
else if (m_splineRadioButton->isChecked())
{
// series 1
m_series = new QSplineSeries;
m_series->setModel(m_model);
m_series->setModelMapping(0,1, Qt::Vertical);
Marek Rosa
PieSeries: model now supports custom mapping.
r1056 // m_series->setModelMappingRange(1, 4);
Marek Rosa
tablemodelchart: axes re-enabled on toggle (pie disables them)
r878 // series->setModelMapping(0,1, Qt::Horizontal);
m_chart->addSeries(m_series);
seriesColorHex = "#" + QString::number(m_series->pen().color().rgb(), 16).right(6).toUpper();
m_model->addMapping(seriesColorHex, QRect(0, 1, 2, 4));
// series 2
m_series = new QSplineSeries;
m_series->setModel(m_model);
m_series->setModelMapping(2,3, Qt::Vertical);
Marek Rosa
PieSeries: model now supports custom mapping.
r1056 // m_series->setModelMappingRange(0, 0);
Marek Rosa
tablemodelchart: axes re-enabled on toggle (pie disables them)
r878 // series->setModelMapping(2,3, Qt::Horizontal);
m_chart->addSeries(m_series);
seriesColorHex = "#" + QString::number(m_series->pen().color().rgb(), 16).right(6).toUpper();
m_model->addMapping(seriesColorHex, QRect(2, 0, 2, 1000));
// series 3
m_series = new QSplineSeries;
m_series->setModel(m_model);
m_series->setModelMapping(4,5, Qt::Vertical);
Marek Rosa
PieSeries: model now supports custom mapping.
r1056 // m_series->setModelMappingRange(2, 0);
Marek Rosa
tablemodelchart: axes re-enabled on toggle (pie disables them)
r878 // series->setModelMapping(4,5, Qt::Horizontal);
m_chart->addSeries(m_series);
seriesColorHex = "#" + QString::number(m_series->pen().color().rgb(), 16).right(6).toUpper();
m_model->addMapping(seriesColorHex, QRect(4, 2, 2, 1000));
}
else if (m_scatterRadioButton->isChecked())
{
// series 1
m_series = new QScatterSeries;
m_series->setModel(m_model);
m_series->setModelMapping(0,1, Qt::Vertical);
Marek Rosa
PieSeries: model now supports custom mapping.
r1056 // m_series->setModelMappingRange(2, 0);
Marek Rosa
tablemodelchart: axes re-enabled on toggle (pie disables them)
r878 // series->setModelMapping(0,1, Qt::Horizontal);
m_chart->addSeries(m_series);
seriesColorHex = "#" + QString::number(m_series->brush().color().rgb(), 16).right(6).toUpper();
m_model->addMapping(seriesColorHex, QRect(0, 2, 2, 1000));
// series 2
m_series = new QScatterSeries;
m_series->setModel(m_model);
m_series->setModelMapping(2,3, Qt::Vertical);
Marek Rosa
PieSeries: model now supports custom mapping.
r1056 // m_series->setModelMappingRange(1, 6);
Marek Rosa
tablemodelchart: axes re-enabled on toggle (pie disables them)
r878 // series->setModelMapping(2,3, Qt::Horizontal);
m_chart->addSeries(m_series);
seriesColorHex = "#" + QString::number(m_series->brush().color().rgb(), 16).right(6).toUpper();
m_model->addMapping(seriesColorHex, QRect(2, 1, 2, 6));
// series 3
m_series = new QScatterSeries;
m_series->setModel(m_model);
m_series->setModelMapping(4,5, Qt::Vertical);
// series->setModelMapping(4,5, Qt::Horizontal);
m_chart->addSeries(m_series);
seriesColorHex = "#" + QString::number(m_series->brush().color().rgb(), 16).right(6).toUpper();
m_model->addMapping(seriesColorHex, QRect(4, 0, 2, 1000));
}
else if (m_pieRadioButton->isChecked())
{
// pie 1
QPieSeries* pieSeries = new QPieSeries;
pieSeries->setModel(m_model);
Marek Rosa
PieSeries: model now supports custom mapping.
r1056 pieSeries->setModelMappingRange(3, 3);
Marek Rosa
tablemodelchart: axes re-enabled on toggle (pie disables them)
r878 pieSeries->setModelMapping(0,0, Qt::Vertical);
pieSeries->setLabelsVisible(true);
Marek Rosa
PieSeries: model now supports custom mapping.
r1056 pieSeries->setPieSize(0.35);
Tero Ahola
Refactored QML example to multiple views
r887 pieSeries->setHorizontalPosition(0.2);
Marek Rosa
PieSeries: model now supports custom mapping.
r1056 pieSeries->setVerticalPosition(0.3);
Marek Rosa
tablemodelchart: axes re-enabled on toggle (pie disables them)
r878
m_chart->addSeries(pieSeries);
seriesColorHex = "#" + QString::number(pieSeries->slices().at(pieSeries->slices().count()/2)->brush().color().rgb(), 16).right(6).toUpper();
Marek Rosa
PieSeries: model now supports custom mapping.
r1056 m_model->addMapping(seriesColorHex, QRect(0, 3, 1, 3));
Marek Rosa
tablemodelchart: axes re-enabled on toggle (pie disables them)
r878
// pie 2
pieSeries = new QPieSeries;
pieSeries->setModel(m_model);
Marek Rosa
PieSeries: model now supports custom mapping.
r1056 pieSeries->setModelMappingRange(2, -1);
Marek Rosa
tablemodelchart: axes re-enabled on toggle (pie disables them)
r878 pieSeries->setModelMapping(1,1, Qt::Vertical);
pieSeries->setLabelsVisible(true);
Marek Rosa
PieSeries: model now supports custom mapping.
r1056 pieSeries->setPieSize(0.35);
Tero Ahola
Refactored QML example to multiple views
r887 pieSeries->setHorizontalPosition(0.8);
Marek Rosa
PieSeries: model now supports custom mapping.
r1056 pieSeries->setVerticalPosition(0.3);
Marek Rosa
tablemodelchart: axes re-enabled on toggle (pie disables them)
r878 m_chart->addSeries(pieSeries);
seriesColorHex = "#" + QString::number(pieSeries->slices().at(pieSeries->slices().count()/2)->brush().color().rgb(), 16).right(6).toUpper();
Marek Rosa
PieSeries: model now supports custom mapping.
r1056 m_model->addMapping(seriesColorHex, QRect(1, 2, 1, 1000));
Marek Rosa
tablemodelchart: axes re-enabled on toggle (pie disables them)
r878
// pie 3
pieSeries = new QPieSeries;
pieSeries->setModel(m_model);
pieSeries->setModelMapping(2,2, Qt::Vertical);
pieSeries->setLabelsVisible(true);
Marek Rosa
PieSeries: model now supports custom mapping.
r1056 pieSeries->setPieSize(0.35);
pieSeries->setHorizontalPosition(0.2);
pieSeries->setVerticalPosition(0.75);
Marek Rosa
tablemodelchart: axes re-enabled on toggle (pie disables them)
r878 m_chart->addSeries(pieSeries);
seriesColorHex = "#" + QString::number(pieSeries->slices().at(pieSeries->slices().count()/2)->brush().color().rgb(), 16).right(6).toUpper();
m_model->addMapping(seriesColorHex, QRect(2, 0, 1, 1000));
Marek Rosa
PieSeries: model now supports custom mapping.
r1056
// special pie
specialPie = new QPieSeries;
specialPie->append(17, "1");
specialPie->append(45, "2");
specialPie->append(77, "3");
specialPie->append(37, "4");
specialPie->append(27, "5");
specialPie->append(47, "6");
specialPie->setPieSize(0.35);
specialPie->setHorizontalPosition(0.8);
specialPie->setVerticalPosition(0.75);
specialPie->setLabelsVisible(true);
m_chart->addSeries(specialPie);
Marek Rosa
tablemodelchart: axes re-enabled on toggle (pie disables them)
r878 }
else if (m_areaRadioButton->isChecked())
{
QLineSeries* upperLineSeries = new QLineSeries;
upperLineSeries->setModel(m_model);
upperLineSeries->setModelMapping(0, 1, Qt::Vertical);
Marek Rosa
PieSeries: model now supports custom mapping.
r1056 // upperLineSeries->setModelMappingRange(1, 5);
Marek Rosa
tablemodelchart: axes re-enabled on toggle (pie disables them)
r878 QLineSeries* lowerLineSeries = new QLineSeries;
lowerLineSeries->setModel(m_model);
lowerLineSeries->setModelMapping(2, 3, Qt::Vertical);
QAreaSeries* areaSeries = new QAreaSeries(upperLineSeries, lowerLineSeries);
m_chart->addSeries(areaSeries);
seriesColorHex = "#" + QString::number(areaSeries->brush().color().rgb(), 16).right(6).toUpper();
m_model->addMapping(seriesColorHex, QRect(0, 1, 2, 5));
m_model->addMapping(seriesColorHex, QRect(2, 0, 2, 1000));
}
else if (m_barRadioButton->isChecked())
{
QBarSeries* barSeries = new QBarSeries(QStringList());
barSeries->setModel(m_model);
Marek Rosa
PieSeries: model now supports custom mapping.
r1056 // barSeries->setModelMappingRange(2, 5);
Marek Rosa
tablemodelchart: axes re-enabled on toggle (pie disables them)
r878 barSeries->setModelMapping(5, 2, 4, Qt::Vertical);
m_chart->addSeries(barSeries);
sauimone
barchart PIMPL part 2. Cleaning up leftovers in public api
r962 QList<QBarSet*> barsets = barSeries->barSets();
for (int i = 0; i < barsets.count(); i++) {
seriesColorHex = "#" + QString::number(barsets.at(i)->brush().color().rgb(), 16).right(6).toUpper();
Marek Rosa
tablemodelchart: axes re-enabled on toggle (pie disables them)
r878 m_model->addMapping(seriesColorHex, QRect(2 + i, 0, 1, 1000));
}
Marek Rosa
tablemodelchart: added coloring to TableView
r849 }
Marek Rosa
Added support for adding and removing data with model. Updated the example
r545
Marek Rosa
Small updates to tablemodelchart example
r861
Marek Rosa
For BarChart labels for legend are now taken from model's headerData (row or column)
r1012 if (!m_barRadioButton->isChecked())
m_chart->axisX()->setRange(0, 500);
Marek Rosa
PieSeries: model now supports custom mapping.
r1056 // m_chart->axisY()->setRange(0, 120);
Marek Rosa
For BarChart labels for legend are now taken from model's headerData (row or column)
r1012 m_chart->legend()->setVisible(true);
Marek Rosa
Small updates to tablemodelchart example
r861
Marek Rosa
tablemodelchart: axes re-enabled on toggle (pie disables them)
r878 // repaint table view colors
m_tableView->repaint();
m_tableView->setFocus();
}
Marek Rosa
Table model data example
r519 }
Marek Rosa
PieSeries: model now supports custom mapping.
r1056 void TableWidget::testPie()
{
if (specialPie) {
specialPie->remove(specialPie->slices().at(2));
// specialPie->insert(4, new QPieSlice(45, "Hello"));//specialPie->slices.at(2));
specialPie->append(4, "heloo");
}
}
Marek Rosa
Table model data example
r519 TableWidget::~TableWidget()
{
Michal Klocek
Changes QChartAxis -> QAxis
r1006
Marek Rosa
Table model data example
r519 }