tablewidget.cpp
133 lines
| 4.1 KiB
| text/x-c
|
CppLexer
Marek Rosa
|
r519 | #include "tablewidget.h" | ||
#include <QGridLayout> | ||||
#include <QTableView> | ||||
#include <QStyledItemDelegate> | ||||
#include "qlineseries.h" | ||||
#include "qsplineseries.h" | ||||
Marek Rosa
|
r545 | #include "qscatterseries.h" | ||
Marek Rosa
|
r519 | #include "customtablemodel.h" | ||
#include "qpieseries.h" | ||||
Marek Rosa
|
r545 | #include <QPushButton> | ||
#include <QRadioButton> | ||||
Marek Rosa
|
r519 | |||
TableWidget::TableWidget(QWidget *parent) | ||||
: QWidget(parent) | ||||
{ | ||||
Marek Rosa
|
r546 | setGeometry(100, 100, 1000, 600); | ||
Marek Rosa
|
r519 | // create simple model for storing data | ||
// user's table data model | ||||
Marek Rosa
|
r545 | m_model = new CustomTableModel; | ||
tableView = new QTableView; | ||||
tableView->setModel(m_model); | ||||
Marek Rosa
|
r519 | tableView->setMinimumSize(340, 480); | ||
// tableView->setItemDelegate(new QStyledItemDelegate); | ||||
Marek Rosa
|
r546 | chartView = new QChartView(this); | ||
Marek Rosa
|
r519 | chartView->setMinimumSize(640, 480); | ||
// create | ||||
// QLineSeries* series = new QLineSeries; | ||||
Marek Rosa
|
r545 | // QSplineSeries* series = new QSplineSeries; | ||
// QScatterSeries* series = new QScatterSeries; | ||||
// series->setModel(m_model); | ||||
// series->setModelMapping(0,1, Qt::Vertical); | ||||
Marek Rosa
|
r519 | |||
// QPieSeries* pieSeries = new QPieSeries; | ||||
// pieSeries->setModel(model); | ||||
// pieSeries | ||||
Marek Rosa
|
r545 | // chartView->addSeries(series); | ||
// add, remove data buttons | ||||
Marek Rosa
|
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
|
r545 | |||
QPushButton* removeRowButton = new QPushButton("Remove row"); | ||||
connect(removeRowButton, SIGNAL(clicked()), this, SLOT(removeRow())); | ||||
// buttons layout | ||||
QVBoxLayout* buttonsLayout = new QVBoxLayout; | ||||
Marek Rosa
|
r546 | buttonsLayout->addWidget(addRowAboveButton); | ||
buttonsLayout->addWidget(addRowBelowButton); | ||||
Marek Rosa
|
r545 | buttonsLayout->addWidget(removeRowButton); | ||
buttonsLayout->addStretch(); | ||||
// chart type radio buttons | ||||
lineRadioButton = new QRadioButton("Line"); | ||||
splineRadioButton = new QRadioButton("Spline"); | ||||
scatterRadioButton = new QRadioButton("Scatter"); | ||||
Marek Rosa
|
r597 | pieRadioButton = new QRadioButton("Pie"); | ||
Marek Rosa
|
r545 | |||
connect(lineRadioButton, SIGNAL(toggled(bool)), this, SLOT(updateChartType())); | ||||
connect(splineRadioButton, SIGNAL(toggled(bool)), this, SLOT(updateChartType())); | ||||
connect(scatterRadioButton, SIGNAL(toggled(bool)), this, SLOT(updateChartType())); | ||||
Marek Rosa
|
r597 | connect(pieRadioButton, SIGNAL(toggled(bool)), this, SLOT(updateChartType())); | ||
Marek Rosa
|
r545 | lineRadioButton->setChecked(true); | ||
// radio buttons layout | ||||
QHBoxLayout* radioLayout = new QHBoxLayout; | ||||
radioLayout->addWidget(lineRadioButton); | ||||
radioLayout->addWidget(splineRadioButton); | ||||
radioLayout->addWidget(scatterRadioButton); | ||||
Marek Rosa
|
r597 | radioLayout->addWidget(pieRadioButton); | ||
Marek Rosa
|
r519 | |||
// create main layout | ||||
QGridLayout* mainLayout = new QGridLayout; | ||||
Marek Rosa
|
r545 | mainLayout->addLayout(buttonsLayout, 0, 1); | ||
mainLayout->addLayout(radioLayout, 0, 2); | ||||
Marek Rosa
|
r519 | mainLayout->addWidget(tableView, 1, 1); | ||
mainLayout->addWidget(chartView, 1, 2); | ||||
Marek Rosa
|
r545 | setLayout(mainLayout); | ||
} | ||||
Marek Rosa
|
r546 | void TableWidget::addRowAbove() | ||
{ | ||||
// m_model->insertRow(m_model->rowCount()); | ||||
m_model->insertRow(tableView->currentIndex().row()); | ||||
} | ||||
void TableWidget::addRowBelow() | ||||
Marek Rosa
|
r545 | { | ||
// m_model->insertRow(m_model->rowCount()); | ||||
m_model->insertRow(tableView->currentIndex().row() + 1); | ||||
} | ||||
void TableWidget::removeRow() | ||||
{ | ||||
// m_model->removeRow(m_model->rowCount() - 1); | ||||
m_model->removeRow(tableView->currentIndex().row()); | ||||
} | ||||
void TableWidget::updateChartType() | ||||
{ | ||||
chartView->removeAllSeries(); | ||||
if (lineRadioButton->isChecked()) | ||||
series = new QLineSeries; | ||||
else if (splineRadioButton->isChecked()) | ||||
series = new QSplineSeries; | ||||
Marek Rosa
|
r597 | else if (scatterRadioButton->isChecked()) | ||
Marek Rosa
|
r545 | series = new QScatterSeries; | ||
Marek Rosa
|
r597 | else if (pieRadioButton->isChecked()) | ||
{ | ||||
QPieSeries* pieSeries = new QPieSeries; | ||||
pieSeries->setModel(m_model); | ||||
pieSeries->setModelMapping(0,2, Qt::Vertical); | ||||
pieSeries->setLabelsVisible(true); | ||||
chartView->addSeries(pieSeries); | ||||
return; | ||||
} | ||||
Marek Rosa
|
r545 | |||
series->setModel(m_model); | ||||
series->setModelMapping(0,1, Qt::Vertical); | ||||
chartView->addSeries(series); | ||||
Marek Rosa
|
r519 | } | ||
TableWidget::~TableWidget() | ||||
{ | ||||
} | ||||