##// END OF EJS Templates
Add animations to pie. Works but has some visual issues when adding slices.
Add animations to pie. Works but has some visual issues when adding slices.

File last commit:

r617:fd7ce4629ee8
r618:249071e508d1
Show More
main.cpp
113 lines | 3.1 KiB | text/x-c | CppLexer
Jani Honkonen
Add drilldown example for piechart
r406 #include <QtGui/QApplication>
#include <QMainWindow>
#include <qchartglobal.h>
#include <qchartview.h>
#include <qpieseries.h>
#include <qpieslice.h>
#include <QTime>
QTCOMMERCIALCHART_USE_NAMESPACE
class DrilldownSlice : public QPieSlice
{
Q_OBJECT
public:
DrilldownSlice(qreal value, QString prefix, QSeries* drilldownSeries)
:m_drilldownSeries(drilldownSeries),
m_prefix(prefix)
{
setValue(value);
setLabelVisible(true);
updateLabel();
connect(this, SIGNAL(changed()), this, SLOT(updateLabel()));
}
QSeries* drilldownSeries() const { return m_drilldownSeries; }
public Q_SLOTS:
void updateLabel()
{
QString label = m_prefix;
Jani Honkonen
Refactor piechartdrilldown example a bit
r408 label += " " + QString::number(this->value())+ "e (";
Jani Honkonen
Add drilldown example for piechart
r406 label += QString::number(this->percentage()*100, 'f', 1) + "%)";
setLabel(label);
}
private:
QSeries* m_drilldownSeries;
QString m_prefix;
};
class DrilldownChart : public QChartView
{
Q_OBJECT
public:
explicit DrilldownChart(QWidget *parent = 0):QChartView(parent), m_currentSeries(0) {}
void changeSeries(QSeries* series)
{
Jani Honkonen
Fix piechartdrilldown bug. Chart was deleting the series from us.
r617 // NOTE: if the series is owned by the chart it will be deleted
// here the "window" owns the series...
Jani Honkonen
Add drilldown example for piechart
r406 if (m_currentSeries)
removeSeries(m_currentSeries);
m_currentSeries = series;
addSeries(series);
setChartTitle(series->title());
}
public Q_SLOTS:
void handleSliceClicked(QPieSlice* slice)
{
DrilldownSlice* drilldownSlice = static_cast<DrilldownSlice*>(slice);
changeSeries(drilldownSlice->drilldownSeries());
}
private:
QSeries* m_currentSeries;
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
QMainWindow window;
DrilldownChart* drilldownChart = new DrilldownChart(&window);
drilldownChart->setRenderHint(QPainter::Antialiasing);
drilldownChart->setChartTheme(QChart::ChartThemeVanilla);
Jani Honkonen
Fix piechartdrilldown bug. Chart was deleting the series from us.
r617 QPieSeries* yearSeries = new QPieSeries(&window);
Jani Honkonen
Add drilldown example for piechart
r406 yearSeries->setTitle("Sales by year - All");
QList<QString> months;
months << "Jan" << "Feb" << "Mar" << "Apr" << "May" << "Jun" << "Jul" << "Aug" << "Sep" << "Oct" << "Nov" << "Dec";
Jani Honkonen
Refactor piechartdrilldown example a bit
r408 QList<QString> names;
names << "Jane" << "John" << "Axel" << "Mary" << "Samantha" << "Bob";
foreach (QString name, names) {
Jani Honkonen
Fix piechartdrilldown bug. Chart was deleting the series from us.
r617 QPieSeries* series = new QPieSeries(&window);
Jani Honkonen
Refactor piechartdrilldown example a bit
r408 series->setTitle("Sales by month - " + name);
foreach (QString month, months)
*series << new DrilldownSlice(qrand() % 1000, month, yearSeries);
QObject::connect(series, SIGNAL(clicked(QPieSlice*)), drilldownChart, SLOT(handleSliceClicked(QPieSlice*)));
*yearSeries << new DrilldownSlice(series->total(), name, series);
}
Jani Honkonen
Add drilldown example for piechart
r406
QObject::connect(yearSeries, SIGNAL(clicked(QPieSlice*)), drilldownChart, SLOT(handleSliceClicked(QPieSlice*)));
drilldownChart->changeSeries(yearSeries);
window.setCentralWidget(drilldownChart);
Jani Honkonen
Fix piechartdrilldown bug. Chart was deleting the series from us.
r617 window.resize(800, 600);
Jani Honkonen
Add drilldown example for piechart
r406 window.show();
return a.exec();
}
#include "main.moc"