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