diff options
Diffstat (limited to 'examples/widget')
-rw-r--r-- | examples/widget/chart.cpp | 71 | ||||
-rw-r--r-- | examples/widget/chart.h | 6 | ||||
-rw-r--r-- | examples/widget/main.cpp | 7 |
3 files changed, 54 insertions, 30 deletions
diff --git a/examples/widget/chart.cpp b/examples/widget/chart.cpp index 62b35c2e..7468ec0d 100644 --- a/examples/widget/chart.cpp +++ b/examples/widget/chart.cpp @@ -48,7 +48,10 @@ ChartModifier::ChartModifier(Q3DBars *barchart) m_yearAxis(new QCategoryAxis), m_monthAxis(new QCategoryAxis), m_genericRowAxis(new QCategoryAxis), - m_genericColumnAxis(new QCategoryAxis) + m_genericColumnAxis(new QCategoryAxis), + m_temperatureData(new QBarDataProxy), + m_genericData(new QBarDataProxy), + m_currentAxis(m_fixedRangeAxis) { // Don't set any styles or specifications, start from defaults // Generate generic labels @@ -110,6 +113,16 @@ ChartModifier::ChartModifier(Q3DBars *barchart) m_chart->addAxis(m_monthAxis); m_chart->addAxis(m_genericRowAxis); m_chart->addAxis(m_genericColumnAxis); + + m_temperatureData->setItemLabelFormat(QStringLiteral("@valueTitle for @colLabel @rowLabel: @valueLabel")); + m_genericData->setItemLabelFormat(QStringLiteral("@valueTitle for (@rowIdx, @colIdx): @valueLabel")); + + m_chart->addDataProxy(m_temperatureData); + m_chart->addDataProxy(m_genericData); + + m_chart->setFont(QFont("Times Roman", 20)); + + resetTemperatureData(); } ChartModifier::~ChartModifier() @@ -119,8 +132,6 @@ ChartModifier::~ChartModifier() void ChartModifier::start() { - m_chart->setFont(QFont("Times Roman", 20)); - restart(false); } @@ -129,7 +140,7 @@ void ChartModifier::restart(bool dynamicData) m_static = !dynamicData; if (m_static) { - resetData(); + m_chart->setActiveDataProxy(m_temperatureData); m_chart->setTitle(QStringLiteral("Average temperatures in Oulu, Finland (2006-2012)")); @@ -139,22 +150,17 @@ void ChartModifier::restart(bool dynamicData) m_chart->setDataWindow(m_years.size(), m_months.size()); m_chart->setSelectionMode(QDataVis::ModeItem); - m_chart->dataProxy()->setItemLabelFormat(QStringLiteral("@valueTitle for @colLabel @rowLabel: @valueLabel")); - } else { - - m_chart->dataProxy()->resetArray(0); + m_chart->setActiveDataProxy(m_genericData); m_chart->setTitle(QStringLiteral("Generic data")); - m_chart->setValueAxis(m_fixedRangeAxis); + m_chart->setValueAxis(m_currentAxis); m_chart->setRowAxis(m_genericRowAxis); m_chart->setColumnAxis(m_genericColumnAxis); m_chart->setDataWindow(m_rowCount, m_columnCount); m_chart->setSelectionMode(QDataVis::ModeItem); - m_chart->dataProxy()->setItemLabelFormat(QStringLiteral("@valueTitle for (@rowIdx, @colIdx): @valueLabel")); - } } @@ -174,15 +180,17 @@ void ChartModifier::swapAxis() int state = ++counter % 3; if (state == 0) { - m_chart->setValueAxis(m_fixedRangeAxis); + m_currentAxis = m_fixedRangeAxis; qDebug() << "Fixed range axis"; } else if (state == 1) { - m_chart->setValueAxis(m_autoAdjustingAxis); + m_currentAxis = m_autoAdjustingAxis; qDebug() << "Automatic range axis"; } else { - m_chart->setValueAxis(0); + m_currentAxis = 0; qDebug() << "default axis"; } + + m_chart->setValueAxis(m_currentAxis); } void ChartModifier::releaseAxes() @@ -199,7 +207,15 @@ void ChartModifier::releaseAxes() m_chart->releaseAxis(m_genericColumnAxis); } -void ChartModifier::resetData() +void ChartModifier::releaseProxies() +{ + // Releases all proxies - results in default proxy. + // Proxies will get readded back when graph is switched as setDataProxy call is made. + m_chart->releaseDataProxy(m_temperatureData); + m_chart->releaseDataProxy(m_genericData); +} + +void ChartModifier::resetTemperatureData() { // Set up data @@ -213,9 +229,6 @@ void ChartModifier::resetData() {-8.7f, -11.3f, -2.3f, 0.4f, 7.5f, 12.2f, 16.4f, 14.1f, 9.2f, 3.1f, 0.3f, -12.1f} // 2012 }; - // Use default data proxy to feed data directly in expected format - QBarDataProxy *proxy = m_chart->dataProxy(); - // Create data rows QBarDataArray *dataSet = new QBarDataArray; QBarDataRow *dataRow; @@ -234,7 +247,7 @@ void ChartModifier::resetData() // Add data to chart (chart assumes ownership) - proxy->resetArray(dataSet); + m_temperatureData->resetArray(dataSet); } void ChartModifier::addRow() @@ -247,7 +260,7 @@ void ChartModifier::addRow() // TODO Needs to be changed to account for data window offset once it is implemented. int row = qMax(m_selectedBarPos.x(), 0); - m_chart->dataProxy()->insertRow(row, dataRow); + m_chart->activeDataProxy()->insertRow(row, dataRow); } void ChartModifier::addRows() @@ -258,13 +271,13 @@ void ChartModifier::addRows() for (int i = 0; i < m_rowCount; i++) { QBarDataRow *dataRow = new QBarDataRow(m_columnCount); for (int j = 0; j < m_columnCount; j++) - (*dataRow)[j].setValue(qreal(j + i + m_chart->dataProxy()->rowCount())); + (*dataRow)[j].setValue(qreal(j + i + m_chart->activeDataProxy()->rowCount())); dataArray.append(dataRow); } // TODO Needs to be changed to account for data window offset once it is implemented. int row = qMax(m_selectedBarPos.x(), 0); - m_chart->dataProxy()->insertRows(row, dataArray); + m_chart->activeDataProxy()->insertRows(row, dataArray); qDebug() << "Added" << m_rowCount << "rows, time:" << timer.elapsed(); } @@ -275,7 +288,7 @@ void ChartModifier::changeItem() int column = m_selectedBarPos.y(); if (row >= 0 && column >= 0) { QBarDataItem item(qreal(rand() % 100)); - m_chart->dataProxy()->setItem(row, column, item); + m_chart->activeDataProxy()->setItem(row, column, item); } } @@ -284,10 +297,10 @@ void ChartModifier::changeRow() // TODO Needs to be changed to account for data window offset once it is implemented. int row = m_selectedBarPos.x(); if (row >= 0) { - QBarDataRow *newRow = new QBarDataRow(m_chart->dataProxy()->rowAt(row)->size()); + QBarDataRow *newRow = new QBarDataRow(m_chart->activeDataProxy()->rowAt(row)->size()); for (int i = 0; i < newRow->size(); i++) (*newRow)[i].setValue(qreal(rand() % 100)); - m_chart->dataProxy()->setRow(row, newRow); + m_chart->activeDataProxy()->setRow(row, newRow); } } @@ -299,12 +312,12 @@ void ChartModifier::changeRows() int startRow = qMax(row - 2, 0); QBarDataArray newArray; for (int i = startRow; i <= row; i++ ) { - QBarDataRow *newRow = new QBarDataRow(m_chart->dataProxy()->rowAt(i)->size()); + QBarDataRow *newRow = new QBarDataRow(m_chart->activeDataProxy()->rowAt(i)->size()); for (int j = 0; j < newRow->size(); j++) (*newRow)[j].setValue(qreal(rand() % 100)); newArray.append(newRow); } - m_chart->dataProxy()->setRows(startRow, newArray); + m_chart->activeDataProxy()->setRows(startRow, newArray); } } @@ -313,7 +326,7 @@ void ChartModifier::removeRow() // TODO Needs to be changed to account for data window offset once it is implemented. int row = m_selectedBarPos.x(); if (row >= 0) - m_chart->dataProxy()->removeRows(row, 1); + m_chart->activeDataProxy()->removeRows(row, 1); } void ChartModifier::removeRows() @@ -322,7 +335,7 @@ void ChartModifier::removeRows() int row = m_selectedBarPos.x(); if (row >= 0) { int startRow = qMax(row - 2, 0); - m_chart->dataProxy()->removeRows(startRow, 3); + m_chart->activeDataProxy()->removeRows(startRow, 3); } } diff --git a/examples/widget/chart.h b/examples/widget/chart.h index a4b6d78d..3319df06 100644 --- a/examples/widget/chart.h +++ b/examples/widget/chart.h @@ -35,7 +35,7 @@ public: explicit ChartModifier(Q3DBars *barchart); ~ChartModifier(); - void resetData(); + void resetTemperatureData(); void addRow(); void addRows(); void changeItem(); @@ -65,6 +65,7 @@ public: void selectBar(); void swapAxis(); void releaseAxes(); + void releaseProxies(); public slots: void changeShadowQuality(int quality); @@ -99,6 +100,9 @@ private: QCategoryAxis *m_monthAxis; QCategoryAxis *m_genericRowAxis; QCategoryAxis *m_genericColumnAxis; + QBarDataProxy *m_temperatureData; + QBarDataProxy *m_genericData; + QValueAxis *m_currentAxis; }; #endif diff --git a/examples/widget/main.cpp b/examples/widget/main.cpp index 628fc453..a774c0e8 100644 --- a/examples/widget/main.cpp +++ b/examples/widget/main.cpp @@ -106,6 +106,10 @@ int main(int argc, char **argv) releaseAxesButton->setText(QStringLiteral("Release all axes")); releaseAxesButton->setEnabled(true); + QPushButton *releaseProxiesButton = new QPushButton(widget); + releaseProxiesButton->setText(QStringLiteral("Release all proxies")); + releaseProxiesButton->setEnabled(true); + QCheckBox *backgroundCheckBox = new QCheckBox(widget); backgroundCheckBox->setText(QStringLiteral("Show background")); backgroundCheckBox->setChecked(true); @@ -206,6 +210,7 @@ int main(int argc, char **argv) vLayout->addWidget(setSelectedBarButton, 0, Qt::AlignTop); vLayout->addWidget(swapAxisButton, 0, Qt::AlignTop); vLayout->addWidget(releaseAxesButton, 0, Qt::AlignTop); + vLayout->addWidget(releaseProxiesButton, 0, Qt::AlignTop); vLayout->addWidget(backgroundCheckBox); vLayout->addWidget(gridCheckBox); vLayout->addWidget(new QLabel(QStringLiteral("Adjust shadow quality"))); @@ -268,6 +273,8 @@ int main(int argc, char **argv) &ChartModifier::swapAxis); QObject::connect(releaseAxesButton, &QPushButton::clicked, modifier, &ChartModifier::releaseAxes); + QObject::connect(releaseProxiesButton, &QPushButton::clicked, modifier, + &ChartModifier::releaseProxies); QObject::connect(fontList, &QFontComboBox::currentFontChanged, modifier, &ChartModifier::changeFont); |