##// END OF EJS Templates
Merge branch 'master' of https://git.it.local/repos/QtCommercialDevel-13049/charts Conflicts: example/gdpbarchart/widget.cpp

File last commit:

r286:85d5e94564e0 merge
r286:85d5e94564e0 merge
Show More
widget.cpp
227 lines | 8.1 KiB | text/x-c | CppLexer
Marek Rosa
Corrected the path to SQlite data
r219 /*!
\class Widget
\brief Ui for the application.
Tero Ahola
Started documenting QChart
r264 \internal
Marek Rosa
Corrected the path to SQlite data
r219 */
Marek Rosa
Initial commit for gdpBarChart example.
r205 #include "widget.h"
#include <QGridLayout>
#include <QPushButton>
#include <QLabel>
#include <QSqlQuery>
#include <qscatterseries.h>
#include <qchartview.h>
#include <qchartaxis.h>
#include <qbarcategory.h>
#include <qbarset.h>
#include <QListWidget>
Marek Rosa
Added chart printing to pdf
r244 #include <QPrinter>
#include <QPrintDialog>
Marek Rosa
Added another chart type choice
r268 #include <QRadioButton>
Marek Rosa
Initial commit for gdpBarChart example.
r205
QTCOMMERCIALCHART_USE_NAMESPACE
Widget::Widget(QWidget *parent)
: QWidget(parent)
Michal Klocek
Compilation fix
r232 {
Marek Rosa
Copy database to bin directory
r242 setGeometry(100, 100, 1000, 600);
Marek Rosa
Initial commit for gdpBarChart example.
r205
// right panel layout
Marek Rosa
Added another chart type choice
r268 barChartRadioButton = new QRadioButton(tr("Bar chart"));
barChartRadioButton->setChecked(true);
scatterChartRadioButton = new QRadioButton(tr("Scatter chart"));
scatterChartRadioButton->setChecked(false);
Marek Rosa
Initial commit for gdpBarChart example.
r205 countrieslist = new QListWidget;
countrieslist->setSelectionMode(QAbstractItemView::MultiSelection);
yearslist = new QListWidget;
yearslist->setSelectionMode(QAbstractItemView::ExtendedSelection);
for (int i = 1990; i < 2011; i++)
yearslist->addItem(QString("%1").arg(i));
QPushButton* refreshButton = new QPushButton(tr("Refresh"));
connect(refreshButton, SIGNAL(clicked()), this, SLOT(refreshChart()));
Marek Rosa
Added chart printing to pdf
r244 QPushButton* printButton = new QPushButton(tr("Print chart"));
connect(printButton, SIGNAL(clicked()), this, SLOT(printChart()));
Marek Rosa
Initial commit for gdpBarChart example.
r205 QVBoxLayout* rightPanelLayout = new QVBoxLayout;
Marek Rosa
Added another chart type choice
r268 rightPanelLayout->addWidget(barChartRadioButton);
rightPanelLayout->addWidget(scatterChartRadioButton);
Marek Rosa
Initial commit for gdpBarChart example.
r205 rightPanelLayout->addWidget(countrieslist);
rightPanelLayout->addWidget(yearslist);
rightPanelLayout->addWidget(refreshButton);
Marek Rosa
Added chart printing to pdf
r244 rightPanelLayout->addWidget(printButton);
Marek Rosa
Initial commit for gdpBarChart example.
r205 rightPanelLayout->setStretch(0, 1);
rightPanelLayout->setStretch(1, 0);
// main layout
chartArea = new QChartView(this);
chartArea->setChartTitle("GDP by country");
QGridLayout* mainLayout = new QGridLayout;
mainLayout->addWidget(chartArea, 0, 0);
mainLayout->addLayout(rightPanelLayout, 0, 1);
mainLayout->setColumnStretch(0,1);
setLayout(mainLayout);
// connect to the database
db = QSqlDatabase::addDatabase("QSQLITE");
Marek Rosa
Copy database to bin directory
r242 db.setDatabaseName("gdpData");
Marek Rosa
Initial commit for gdpBarChart example.
r205 if(!db.open())
{
qDebug() << "could not open database. SQLite db file missing (?)";
return;
}
// get the list of all countires and regions.
QSqlQuery query;
query.exec("SELECT DISTINCT country FROM gdp2");
// add the countries to the country filter
while (query.next()) {
countrieslist->addItem(query.value(0).toString());
}
// hide axis X labels
Michal Klocek
Compilation fix
r232 QChartAxis* axis = chartArea->axisX();
Marek Rosa
Added another chart type choice
r268 // axis->setLabelsVisible(false);
Marek Rosa
Added chart printing to pdf
r244 // newAxis.setLabelsOrientation(QChartAxis::LabelsOrientationSlide);
Michal Klocek
Compilation fix
r232
Marek Rosa
Initial commit for gdpBarChart example.
r205 }
Widget::~Widget()
{
//
db.close();
}
Marek Rosa
Corrected the path to SQlite data
r219 /*!
refreshes the chart
*/
Marek Rosa
Initial commit for gdpBarChart example.
r205 void Widget::refreshChart()
{
Marek Rosa
else clause added to QChartView mousePressEvent. Added some more docs to QChart and QChartView
r285 chartArea->removeAllSeries();
Marek Rosa
Added another chart type choice
r268
Marek Rosa
Initial commit for gdpBarChart example.
r205 // selected countries items list is not sorted. copy the values to QStringlist and sort them.
QStringList selectedCountriesStrings;
QList<QListWidgetItem*> selectedCountriesItems = countrieslist->selectedItems();
for (int i = 0; i < selectedCountriesItems.size(); i++)
selectedCountriesStrings.append(selectedCountriesItems[i]->text());
selectedCountriesStrings.sort();
QSqlQuery query;
// selected years items list is not sorted. copy the values to QList<Integer> and sort them.
QList<int> selectedYearsInts;
QList<QListWidgetItem*> selectedYearsItems = yearslist->selectedItems();
for (int i = 0; i < selectedYearsItems.size(); i++)
selectedYearsInts.append(selectedYearsItems[i]->text().toInt());
Marek Rosa
Added another chart type choice
r268 qSort(selectedYearsInts.begin(), selectedYearsInts.end(), qGreater<int>());
Marek Rosa
Initial commit for gdpBarChart example.
r205
Marek Rosa
Added another chart type choice
r268 if (barChartRadioButton->isChecked())
Marek Rosa
Initial commit for gdpBarChart example.
r205 {
Marek Rosa
Added another chart type choice
r268 // use the sorted selected coutries list to initialize BarCategory
QBarCategory* category = new QBarCategory;
for (int i = 0; i < selectedCountriesStrings.size(); i++)
*category << selectedCountriesStrings[i];
series0 = new QBarChartSeries(category);
// prepare the selected counries SQL query
QString countriesQuery = "country IN (";
for (int i = 0; i < selectedCountriesStrings.size(); i++)
Marek Rosa
Initial commit for gdpBarChart example.
r205 {
Marek Rosa
Added another chart type choice
r268 countriesQuery.append("'" + selectedCountriesStrings[i] + "'");
if ( i < selectedCountriesStrings.size() - 1)
countriesQuery.append(",");
else
countriesQuery.append(")");
}
// perform a query for each selected year
for (int i = 0; i < selectedYearsInts.size(); i++)
{
query.exec("SELECT country,gdpvalue FROM gdp2 where year=" + QString("%1").arg(selectedYearsInts[i]) + " AND " + countriesQuery);
Tero Ahola
Fixed compilation of example apps with QBarSets
r284 QBarSet* barSet = new QBarSet("Barset" + QString::number(i));
Marek Rosa
Merge branch 'master' of https://git.it.local/repos/QtCommercialDevel-13049/charts...
r286
Marek Rosa
Added another chart type choice
r268 // while (query.next()) {
// qDebug() << query.value(0).toString() << " : " << query.value(1).toString();
// }
query.first();
// the data for some of the coutries for some years might be missing.
// QBarChart needs bars to have same size
for (int k = 0; k < selectedCountriesStrings.size(); k++)
Marek Rosa
Initial commit for gdpBarChart example.
r205 {
Marek Rosa
Added another chart type choice
r268 if (selectedCountriesStrings[k] == query.value(0).toString())
{
*barSet << query.value(1).toReal();
qDebug() << query.value(0).toString() << query.value(1).toReal() << " : " << QString("%1").arg(selectedYearsInts[i]);
query.next();
}
else
{
// data missing, put 0
*barSet << 0.0f;
qDebug() << "Putting 0 for Bosnia" << " : " << QString("%1").arg(selectedYearsInts[i]);
}
Marek Rosa
Initial commit for gdpBarChart example.
r205 }
Marek Rosa
Added another chart type choice
r268 series0->addBarSet(barSet);
}
// add the serie to the chart
chartArea->addSeries(series0);
}
else if (scatterChartRadioButton->isChecked())
{
QString yearsQuery = "year IN (";
for (int i = 0; i < selectedYearsInts.size(); i++)
{
yearsQuery.append("'" + QString("%1").arg(selectedYearsInts[i]) + "'");
if ( i < selectedYearsInts.size() - 1)
yearsQuery.append(",");
Marek Rosa
Initial commit for gdpBarChart example.
r205 else
Marek Rosa
Added another chart type choice
r268 yearsQuery.append(")");
}
// perform a query for each selected year
for (int i = 0; i < selectedCountriesStrings.size(); i++)
{
query.exec("SELECT year,gdpvalue FROM gdp2 where country='" + selectedCountriesStrings[i] + "' AND " + yearsQuery);
query.first();
QScatterSeries* series = new QScatterSeries;
// the data for some of the coutries for some years might be missing.
for (int k = 0; k < selectedYearsInts.size(); k++)
Marek Rosa
Initial commit for gdpBarChart example.
r205 {
Marek Rosa
Added another chart type choice
r268 if (selectedYearsInts[k] == query.value(0).toInt())
{
*series << QPointF(query.value(0).toInt() , query.value(1).toReal());
qDebug() << query.value(0).toString() << query.value(1).toReal() << " : " << QString("%1").arg(selectedYearsInts[k]);
query.next();
}
else
{
// data missing, put 0
*series << QPointF(selectedYearsInts[k] , 0.0f);
qDebug() << "Putting 0 for Bosnia" << " : " << QString("%1").arg(selectedYearsInts[i]) << " " << query.value(0).toInt();
}
Marek Rosa
Initial commit for gdpBarChart example.
r205 }
Marek Rosa
else clause added to QChartView mousePressEvent. Added some more docs to QChart and QChartView
r285 // chartArea->axisX()->setRange(selectedYearsInts[selectedYearsInts.size() - 1] + 1, selectedYearsInts[0] - 1);
Marek Rosa
Added another chart type choice
r268 chartArea->addSeries(series);
Marek Rosa
Initial commit for gdpBarChart example.
r205 }
Marek Rosa
else clause added to QChartView mousePressEvent. Added some more docs to QChart and QChartView
r285 chartArea->axisX()->setRange(selectedYearsInts[selectedYearsInts.size() - 1] + 1, selectedYearsInts[0] - 1);
Marek Rosa
Initial commit for gdpBarChart example.
r205 }
}
Marek Rosa
Added chart printing to pdf
r244
void Widget::printChart()
{
QPrinter printer;
Marek Rosa
Added another chart type choice
r268 // QPrinter printer(QPrinter::HighResolution);
Marek Rosa
Added chart printing to pdf
r244 printer.setOutputFormat(QPrinter::PdfFormat);
printer.setOrientation(QPrinter::Landscape);
printer.setOutputFileName("print.pdf");
QPainter painter;
painter.begin(&printer);
chartArea->render(&painter);
}