##// END OF EJS Templates
Better way to enable features to user. Do less, but expose signals to user and allow user to descide what to do.
Better way to enable features to user. Do less, but expose signals to user and allow user to descide what to do.

File last commit:

r377:a61a7697be62
r425:85842e6c8dba
Show More
widget.cpp
227 lines | 8.0 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 <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>
sauimone
replaced qbarcategory with qstringlist
r377 #include <QStringList>
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
sauimone
replaced qbarcategory with qstringlist
r377 QStringList category;
Marek Rosa
Added another chart type choice
r268 for (int i = 0; i < selectedCountriesStrings.size(); i++)
sauimone
replaced qbarcategory with qstringlist
r377 category << selectedCountriesStrings[i];
sauimone
Naming convention change for barcharts. QBarChartSeries is now QBarSeries etc.
r338 series0 = new QBarSeries(category);
Marek Rosa
Added another chart type choice
r268
// 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);
}