##// END OF EJS Templates
Drilldown example using stacked barchart.
Drilldown example using stacked barchart.

File last commit:

r449:2d02ec95e04f
r449:2d02ec95e04f
Show More
main.cpp
152 lines | 4.8 KiB | text/x-c | CppLexer
sauimone
Drilldown example for barcharts continuing. Still some bugs
r430 #include <QtGui/QApplication>
sauimone
Better way to enable features to user. Do less, but expose signals to user and allow user to descide what to do.
r425 #include <QMainWindow>
sauimone
Drilldown example for barcharts continuing. Still some bugs
r430 #include <qchartglobal.h>
sauimone
Better way to enable features to user. Do less, but expose signals to user and allow user to descide what to do.
r425 #include <qchartview.h>
#include <qstackedbarseries.h>
#include <qbarset.h>
#include <qchartaxis.h>
#include <QStringList>
sauimone
Drilldown example for barcharts continuing. Still some bugs
r430 #include <QDebug>
sauimone
Better way to enable features to user. Do less, but expose signals to user and allow user to descide what to do.
r425
QTCOMMERCIALCHART_USE_NAMESPACE
sauimone
Drilldown example for barcharts continuing. Still some bugs
r430 //! [1]
class DrilldownBarSeries : public QStackedBarSeries
{
Q_OBJECT
public:
sauimone
Drilldown example using stacked barchart.
r449 DrilldownBarSeries(QStringList categories, QObject *parent = 0) : QStackedBarSeries(categories,parent) {}
sauimone
updating drilldown example. Needs some more thinking
r438
sauimone
Drilldown example using stacked barchart.
r449 void addDrilldownSeries(QString category, DrilldownBarSeries* drilldownSeries)
sauimone
Drilldown example for barcharts continuing. Still some bugs
r430 {
sauimone
Drilldown example using stacked barchart.
r449 mDrilldownSeries[category] = drilldownSeries;
sauimone
Drilldown example for barcharts continuing. Still some bugs
r430 }
sauimone
updating drilldown example. Needs some more thinking
r438
DrilldownBarSeries* drilldownSeries(QString category)
sauimone
Drilldown example using stacked barchart.
r449 {
// qDebug() << "DrilldownBarSeries::drilldownSeries" << category << mDrilldownSeries[category];
return mDrilldownSeries[category];
}
public Q_SLOTS:
sauimone
Drilldown example for barcharts continuing. Still some bugs
r430
private:
sauimone
Drilldown example using stacked barchart.
r449
QMap<QString, DrilldownBarSeries*> mDrilldownSeries;
sauimone
Drilldown example for barcharts continuing. Still some bugs
r430 };
sauimone
Drilldown example using stacked barchart.
r449 //! [1]
sauimone
Drilldown example for barcharts continuing. Still some bugs
r430
sauimone
Drilldown example using stacked barchart.
r449 //! [2]
sauimone
Drilldown example for barcharts continuing. Still some bugs
r430 class DrilldownChart : public QChartView
{
Q_OBJECT
public:
explicit DrilldownChart(QWidget *parent = 0) : QChartView(parent), m_currentSeries(0) {}
void changeSeries(QSeries* series)
{
if (m_currentSeries)
removeSeries(m_currentSeries);
m_currentSeries = series;
addSeries(series);
setChartTitle(series->title());
}
public Q_SLOTS:
sauimone
updating drilldown example. Needs some more thinking
r438 void handleRightClick(QBarSet *barset, QString category)
sauimone
Drilldown example for barcharts continuing. Still some bugs
r430 {
qDebug() << "DrilldownChart::handleRightClick" << barset->name() << category;
// TODO: continue from here
sauimone
Drilldown example using stacked barchart.
r449 DrilldownBarSeries* series = static_cast<DrilldownBarSeries*> (sender());
changeSeries(series->drilldownSeries(category));
sauimone
Drilldown example for barcharts continuing. Still some bugs
r430 }
private:
QSeries* m_currentSeries;
};
sauimone
Drilldown example using stacked barchart.
r449 //! [2]
sauimone
Drilldown example for barcharts continuing. Still some bugs
r430
sauimone
Better way to enable features to user. Do less, but expose signals to user and allow user to descide what to do.
r425 int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QMainWindow window;
sauimone
Drilldown example for barcharts continuing. Still some bugs
r430 DrilldownChart* drilldownChart = new DrilldownChart(&window);
drilldownChart->setChartTheme(QChart::ChartThemeIcy);
sauimone
Drilldown example using stacked barchart.
r449 //! [3]
sauimone
Better way to enable features to user. Do less, but expose signals to user and allow user to descide what to do.
r425 // Define categories
sauimone
Drilldown example for barcharts continuing. Still some bugs
r430 QStringList months;
sauimone
updating drilldown example. Needs some more thinking
r438 months << "Jun" << "Jul" << "Aug" << "Sep";
sauimone
Drilldown example for barcharts continuing. Still some bugs
r430 QStringList weeks;
weeks << "week 1" << "week 2" << "week 3" << "week 4";
QStringList plants;
plants << "Habanero" << "Lemon Drop" << "Starfish" << "Aji Amarillo";
sauimone
Drilldown example using stacked barchart.
r449 //! [3]
sauimone
updating drilldown example. Needs some more thinking
r438 //! [4]
sauimone
Drilldown example using stacked barchart.
r449 // Create drilldown structure
DrilldownBarSeries* seasonSeries = new DrilldownBarSeries(months, drilldownChart);
seasonSeries->setTitle("Crop by month - Season");
sauimone
Better way to enable features to user. Do less, but expose signals to user and allow user to descide what to do.
r425
sauimone
Drilldown example using stacked barchart.
r449 // Each month in season series has drilldown series for weekly data
foreach (QString month, months) {
sauimone
Drilldown example for barcharts continuing. Still some bugs
r430
sauimone
Drilldown example using stacked barchart.
r449 // Create drilldown series for every week
sauimone
updating drilldown example. Needs some more thinking
r438 DrilldownBarSeries* weeklySeries = new DrilldownBarSeries(weeks, drilldownChart);
sauimone
Drilldown example using stacked barchart.
r449 seasonSeries->addDrilldownSeries(month, weeklySeries);
sauimone
updating drilldown example. Needs some more thinking
r438
sauimone
Drilldown example using stacked barchart.
r449 // Drilling down from weekly data brings us back to season data.
foreach (QString week, weeks) {
weeklySeries->addDrilldownSeries(week, seasonSeries);
weeklySeries->setTitle(QString("Crop by week - " + month));
sauimone
Drilldown example for barcharts continuing. Still some bugs
r430 }
sauimone
Drilldown example using stacked barchart.
r449 // Use right click signal to implement drilldown
QObject::connect(weeklySeries,SIGNAL(rightClicked(QBarSet*,QString)),drilldownChart,SLOT(handleRightClick(QBarSet*,QString)));
sauimone
Drilldown example for barcharts continuing. Still some bugs
r430 }
sauimone
Drilldown example using stacked barchart.
r449 //! [4]
sauimone
Drilldown example for barcharts continuing. Still some bugs
r430
sauimone
Drilldown example using stacked barchart.
r449 //! [5]
// Fill monthly and weekly series with data
sauimone
updating drilldown example. Needs some more thinking
r438 foreach (QString plant, plants) {
sauimone
Drilldown example using stacked barchart.
r449 QBarSet* monthlyCrop = new QBarSet(plant);
foreach (QString month, months) {
QBarSet* weeklyCrop = new QBarSet(plant);
sauimone
updating drilldown example. Needs some more thinking
r438 foreach (QString week, weeks ) {
*weeklyCrop << (qrand() % 20);
}
sauimone
Drilldown example using stacked barchart.
r449 // Get the drilldown series from upper level series and add crop to it.
seasonSeries->drilldownSeries(month)->addBarSet(weeklyCrop);
seasonSeries->drilldownSeries(month)->setToolTipEnabled(true);
sauimone
updating drilldown example. Needs some more thinking
r438 *monthlyCrop << weeklyCrop->total();
sauimone
Drilldown example using stacked barchart.
r449
sauimone
updating drilldown example. Needs some more thinking
r438 QObject::connect(weeklyCrop,SIGNAL(clicked(QString)),weeklyCrop,SIGNAL(toggleFloatingValues()));
}
sauimone
Drilldown example using stacked barchart.
r449 seasonSeries->addBarSet(monthlyCrop);
sauimone
updating drilldown example. Needs some more thinking
r438 QObject::connect(monthlyCrop,SIGNAL(clicked(QString)),monthlyCrop,SIGNAL(toggleFloatingValues()));
}
sauimone
Drilldown example using stacked barchart.
r449 //! [5]
seasonSeries->setToolTipEnabled(true);
// Enable drilldown from season series using right click.
QObject::connect(seasonSeries,SIGNAL(rightClicked(QBarSet*,QString)),drilldownChart,SLOT(handleRightClick(QBarSet*,QString)));
sauimone
Drilldown example for barcharts continuing. Still some bugs
r430
sauimone
Drilldown example using stacked barchart.
r449 // Show season series in initial view
drilldownChart->changeSeries(seasonSeries);
drilldownChart->setChartTitle(seasonSeries->title());
sauimone
Drilldown example for barcharts continuing. Still some bugs
r430
sauimone
Drilldown example using stacked barchart.
r449 // Disable axis, since they don't really apply to bar chart
sauimone
Drilldown example for barcharts continuing. Still some bugs
r430 drilldownChart->axisX()->setAxisVisible(false);
drilldownChart->axisX()->setGridVisible(false);
drilldownChart->axisX()->setLabelsVisible(false);
window.setCentralWidget(drilldownChart);
sauimone
Better way to enable features to user. Do less, but expose signals to user and allow user to descide what to do.
r425 window.resize(400, 300);
window.show();
sauimone
Drilldown example for barcharts continuing. Still some bugs
r430
sauimone
Better way to enable features to user. Do less, but expose signals to user and allow user to descide what to do.
r425 return a.exec();
}
sauimone
Drilldown example for barcharts continuing. Still some bugs
r430 #include "main.moc"