summaryrefslogtreecommitdiffstats
path: root/examples/rainfall
diff options
context:
space:
mode:
Diffstat (limited to 'examples/rainfall')
-rw-r--r--examples/rainfall/data/raindata.txt170
-rw-r--r--examples/rainfall/main.cpp257
-rw-r--r--examples/rainfall/rainfall.pro5
-rw-r--r--examples/rainfall/rainfall.qrc5
4 files changed, 227 insertions, 210 deletions
diff --git a/examples/rainfall/data/raindata.txt b/examples/rainfall/data/raindata.txt
new file mode 100644
index 00000000..faa636d4
--- /dev/null
+++ b/examples/rainfall/data/raindata.txt
@@ -0,0 +1,170 @@
+# Rainfall per month from 2000 to 2012 in Northern Finland (Sodankylä, Utsjoki, Kuusamo)
+
+2000,1, 72,
+2000,2, 47,
+2000,3, 37,
+2000,4, 79,
+2000,5, 42,
+2000,6, 73,
+2000,7, 94,
+2000,8, 37,
+2000,9, 17,
+2000,10,69,
+2000,11,42,
+2000,12,42,
+
+2001,1, 25,
+2001,2, 47,
+2001,3, 20,
+2001,4, 70,
+2001,5, 27,
+2001,6, 40,
+2001,7, 123,
+2001,8, 39,
+2001,9, 66,
+2001,10,55,
+2001,11,29,
+2001,12,12,
+
+2002,1, 24,
+2002,2, 45,
+2002,3, 27,
+2002,4, 30,
+2002,5, 16,
+2002,6, 98,
+2002,7, 122,
+2002,8, 20,
+2002,9, 50,
+2002,10,24,
+2002,11,22,
+2002,12,12,
+
+2003,1, 43,
+2003,2, 17,
+2003,3, 26,
+2003,4, 22,
+2003,5, 60,
+2003,6, 14,
+2003,7, 86,
+2003,8, 77,
+2003,9, 69,
+2003,10,49,
+2003,11,23,
+2003,12,44,
+
+2004,1, 15,
+2004,2, 19,
+2004,3, 10,
+2004,4, 11,
+2004,5, 41,
+2004,6, 29,
+2004,7, 49,
+2004,8, 72,
+2004,9, 50,
+2004,10,18,
+2004,11,19,
+2004,12,40,
+
+2005,1, 60,
+2005,2, 24,
+2005,3, 12,
+2005,4, 50,
+2005,5, 88,
+2005,6, 32,
+2005,7, 76,
+2005,8, 55,
+2005,9, 92,
+2005,10,35,
+2005,11,105,
+2005,12,59,
+
+2006,1, 27,
+2006,2, 18,
+2006,3, 17,
+2006,4, 26,
+2006,5, 24,
+2006,6, 18,
+2006,7, 35,
+2006,8, 28,
+2006,9, 80,
+2006,10,52,
+2006,11,43,
+2006,12,44,
+
+2007,1, 41,
+2007,2, 21,
+2007,3, 30,
+2007,4, 20,
+2007,5, 53,
+2007,6, 29,
+2007,7, 139,
+2007,8, 52,
+2007,9, 51,
+2007,10,24,
+2007,11,47,
+2007,12,33,
+
+2008,1, 67,
+2008,2, 19,
+2008,3, 30,
+2008,4, 31,
+2008,5, 29,
+2008,6, 79,
+2008,7, 75,
+2008,8, 99,
+2008,9, 34,
+2008,10,52,
+2008,11,60,
+2008,12,20,
+
+2009,1, 9,
+2009,2, 22,
+2009,3, 11,
+2009,4, 10,
+2009,5, 69,
+2009,6, 30,
+2009,7, 78,
+2009,8, 93,
+2009,9, 70,
+2009,10,32,
+2009,11,56,
+2009,12,23,
+
+2010,1, 12,
+2010,2, 28,
+2010,3, 55,
+2010,4, 20,
+2010,5, 65,
+2010,6, 26,
+2010,7, 134,
+2010,8, 57,
+2010,9, 51,
+2010,10,53,
+2010,11,8,
+2010,12,9,
+
+2011,1, 34,
+2011,2, 20,
+2011,3, 30,
+2011,4, 31,
+2011,5, 42,
+2011,6, 78,
+2011,7, 85,
+2011,8, 33,
+2011,9, 42,
+2011,10,87,
+2011,11,41,
+2011,12,72,
+
+2012,1, 32,
+2012,2, 42,
+2012,3, 30,
+2012,4, 50,
+2012,5, 30,
+2012,6, 70,
+2012,7, 52,
+2012,8, 20,
+2012,9, 99,
+2012,10,70,
+2012,11,69,
+2012,12,49
diff --git a/examples/rainfall/main.cpp b/examples/rainfall/main.cpp
index db736903..6c43f2a0 100644
--- a/examples/rainfall/main.cpp
+++ b/examples/rainfall/main.cpp
@@ -39,13 +39,14 @@
****************************************************************************/
#include "q3dbars.h"
-#include "qdataitem.h"
#include "qcategoryaxis.h"
-#include "qolddataproxy.h"
+#include "qvariantbardataproxy.h"
#include <QGuiApplication>
#include <QFont>
#include <QDebug>
+#include <QTextStream>
+#include <QFile>
using namespace QtDataVis3D;
@@ -62,6 +63,7 @@ private:
Q3DBars *m_chart;
int m_columnCount;
int m_rowCount;
+ QStringList m_years;
};
RainfallChart::RainfallChart(Q3DBars *rainfall)
@@ -79,13 +81,12 @@ RainfallChart::RainfallChart(Q3DBars *rainfall)
// Set axis labels and titles
QStringList months;
months << "January" << "February" << "March" << "April" << "May" << "June" << "July" << "August" << "September" << "October" << "November" << "December";
- QStringList years;
- years << "2000" << "2001" << "2002" << "2003" << "2004" << "2005" << "2006" << "2007" << "2008" << "2009" << "2010" << "2011" << "2012";
+ m_years << "2000" << "2001" << "2002" << "2003" << "2004" << "2005" << "2006" << "2007" << "2008" << "2009" << "2010" << "2011" << "2012";
m_chart->rowAxis()->setTitle("Year");
m_chart->columnAxis()->setTitle("Month");
m_chart->valueAxis()->setTitle("rainfall (in mm)");
- m_chart->rowAxis()->setLabels(years);
+ m_chart->rowAxis()->setLabels(m_years);
m_chart->columnAxis()->setLabels(months);
// Set bar type to cylinder
@@ -112,6 +113,9 @@ RainfallChart::RainfallChart(Q3DBars *rainfall)
// Set window title
m_chart->setWindowTitle(QStringLiteral("Monthly rainfall in Northern Finland (2000-2012)"));
+
+ QVariantBarDataProxy *proxy = new QVariantBarDataProxy;
+ m_chart->setDataProxy(proxy);
}
RainfallChart::~RainfallChart()
@@ -126,211 +130,44 @@ void RainfallChart::start()
void RainfallChart::addDataSet()
{
- // Fill in rainfall per month from 2000 to 2012 in Northern Finland (Sodankylä, Utsjoki, Kuusamo)
- QVector< QVector<QDataItem*> > data;
- QVector<QDataItem*> row;
- // TODO: Change this example to load data from file
- // 2000
- row.append(new QDataItem(72, "mm")); //January 2000
- row.append(new QDataItem(47, "mm")); //February 2000
- row.append(new QDataItem(37, "mm")); //March 2000
- row.append(new QDataItem(79, "mm")); //April 2000
- row.append(new QDataItem(42, "mm")); //May 2000
- row.append(new QDataItem(73, "mm")); //June 2000
- row.append(new QDataItem(94, "mm")); //July 2000
- row.append(new QDataItem(37, "mm")); //August 2000
- row.append(new QDataItem(17, "mm")); //September 2000
- row.append(new QDataItem(69, "mm")); //October 2000
- row.append(new QDataItem(42, "mm")); //November 2000
- row.append(new QDataItem(42, "mm")); //December 2000
- data.append(row);
- row.clear();
- // 2001
- row.append(new QDataItem(25, "mm")); //January 2001
- row.append(new QDataItem(47, "mm")); //February 2001
- row.append(new QDataItem(20, "mm")); //March 2001
- row.append(new QDataItem(70, "mm")); //April 2001
- row.append(new QDataItem(27, "mm")); //May 2001
- row.append(new QDataItem(40, "mm")); //June 2001
- row.append(new QDataItem(123, "mm")); //July 2001
- row.append(new QDataItem(39, "mm")); //August 2001
- row.append(new QDataItem(66, "mm")); //September 2001
- row.append(new QDataItem(55, "mm")); //October 2001
- row.append(new QDataItem(29, "mm")); //November 2001
- row.append(new QDataItem(12, "mm")); //December 2001
- data.append(row);
- row.clear();
- // 2002
- row.append(new QDataItem(24, "mm")); //January 2002
- row.append(new QDataItem(45, "mm")); //February 2002
- row.append(new QDataItem(27, "mm")); //March 2002
- row.append(new QDataItem(30, "mm")); //April 2002
- row.append(new QDataItem(16, "mm")); //May 2002
- row.append(new QDataItem(98, "mm")); //June 2002
- row.append(new QDataItem(122, "mm")); //July 2002
- row.append(new QDataItem(20, "mm")); //August 2002
- row.append(new QDataItem(50, "mm")); //September 2002
- row.append(new QDataItem(24, "mm")); //October 2002
- row.append(new QDataItem(22, "mm")); //November 2002
- row.append(new QDataItem(12, "mm")); //December 2002
- data.append(row);
- row.clear();
- // 2003
- row.append(new QDataItem(43, "mm")); //January 2003
- row.append(new QDataItem(17, "mm")); //February 2003
- row.append(new QDataItem(26, "mm")); //March 2003
- row.append(new QDataItem(22, "mm")); //April 2003
- row.append(new QDataItem(60, "mm")); //May 2003
- row.append(new QDataItem(14, "mm")); //June 2003
- row.append(new QDataItem(86, "mm")); //July 2003
- row.append(new QDataItem(77, "mm")); //August 2003
- row.append(new QDataItem(69, "mm")); //September 2003
- row.append(new QDataItem(49, "mm")); //October 2003
- row.append(new QDataItem(23, "mm")); //November 2003
- row.append(new QDataItem(44, "mm")); //December 2003
- data.append(row);
- row.clear();
- // 2004
- row.append(new QDataItem(15, "mm")); //January 2004
- row.append(new QDataItem(19, "mm")); //February 2004
- row.append(new QDataItem(10, "mm")); //March 2004
- row.append(new QDataItem(11, "mm")); //April 2004
- row.append(new QDataItem(41, "mm")); //May 2004
- row.append(new QDataItem(29, "mm")); //June 2004
- row.append(new QDataItem(49, "mm")); //July 2004
- row.append(new QDataItem(72, "mm")); //August 2004
- row.append(new QDataItem(50, "mm")); //September 2004
- row.append(new QDataItem(18, "mm")); //October 2004
- row.append(new QDataItem(19, "mm")); //November 2004
- row.append(new QDataItem(40, "mm")); //December 2004
- data.append(row);
- row.clear();
- // 2005
- row.append(new QDataItem(60, "mm")); //January 2005
- row.append(new QDataItem(24, "mm")); //February 2005
- row.append(new QDataItem(12, "mm")); //March 2005
- row.append(new QDataItem(50, "mm")); //April 2005
- row.append(new QDataItem(88, "mm")); //May 2005
- row.append(new QDataItem(32, "mm")); //June 2005
- row.append(new QDataItem(76, "mm")); //July 2005
- row.append(new QDataItem(55, "mm")); //August 2005
- row.append(new QDataItem(92, "mm")); //September 2005
- row.append(new QDataItem(35, "mm")); //October 2005
- row.append(new QDataItem(105, "mm")); //November 2005
- row.append(new QDataItem(59, "mm")); //December 2005
- data.append(row);
- row.clear();
- // 2006
- row.append(new QDataItem(27, "mm")); //January 2006
- row.append(new QDataItem(18, "mm")); //February 2006
- row.append(new QDataItem(17, "mm")); //March 2006
- row.append(new QDataItem(26, "mm")); //April 2006
- row.append(new QDataItem(24, "mm")); //May 2006
- row.append(new QDataItem(18, "mm")); //June 2006
- row.append(new QDataItem(35, "mm")); //July 2006
- row.append(new QDataItem(28, "mm")); //August 2006
- row.append(new QDataItem(80, "mm")); //September 2006
- row.append(new QDataItem(52, "mm")); //October 2006
- row.append(new QDataItem(43, "mm")); //November 2006
- row.append(new QDataItem(44, "mm")); //December 2006
- data.append(row);
- row.clear();
- // 2007
- row.append(new QDataItem(41, "mm")); //January 2007
- row.append(new QDataItem(21, "mm")); //February 2007
- row.append(new QDataItem(30, "mm")); //March 2007
- row.append(new QDataItem(20, "mm")); //April 2007
- row.append(new QDataItem(53, "mm")); //May 2007
- row.append(new QDataItem(29, "mm")); //June 2007
- row.append(new QDataItem(139, "mm")); //July 2007
- row.append(new QDataItem(52, "mm")); //August 2007
- row.append(new QDataItem(51, "mm")); //September 2007
- row.append(new QDataItem(24, "mm")); //October 2007
- row.append(new QDataItem(47, "mm")); //November 2007
- row.append(new QDataItem(33, "mm")); //December 2007
- data.append(row);
- row.clear();
- // 2008
- row.append(new QDataItem(67, "mm")); //January 2008
- row.append(new QDataItem(19, "mm")); //February 2008
- row.append(new QDataItem(30, "mm")); //March 2008
- row.append(new QDataItem(31, "mm")); //April 2008
- row.append(new QDataItem(29, "mm")); //May 2008
- row.append(new QDataItem(79, "mm")); //June 2008
- row.append(new QDataItem(75, "mm")); //July 2008
- row.append(new QDataItem(99, "mm")); //August 2008
- row.append(new QDataItem(34, "mm")); //September 2008
- row.append(new QDataItem(52, "mm")); //October 2008
- row.append(new QDataItem(60, "mm")); //November 2008
- row.append(new QDataItem(20, "mm")); //December 2008
- data.append(row);
- row.clear();
- // 2009
- row.append(new QDataItem(9, "mm")); //January 2009
- row.append(new QDataItem(22, "mm")); //February 2009
- row.append(new QDataItem(11, "mm")); //March 2009
- row.append(new QDataItem(10, "mm")); //April 2009
- row.append(new QDataItem(69, "mm")); //May 2009
- row.append(new QDataItem(30, "mm")); //June 2009
- row.append(new QDataItem(78, "mm")); //July 2009
- row.append(new QDataItem(93, "mm")); //August 2009
- row.append(new QDataItem(70, "mm")); //September 2009
- row.append(new QDataItem(32, "mm")); //October 2009
- row.append(new QDataItem(56, "mm")); //November 2009
- row.append(new QDataItem(23, "mm")); //December 2009
- data.append(row);
- row.clear();
- // 2010
- row.append(new QDataItem(12, "mm")); //January 2010
- row.append(new QDataItem(28, "mm")); //February 2010
- row.append(new QDataItem(55, "mm")); //March 2010
- row.append(new QDataItem(20, "mm")); //April 2010
- row.append(new QDataItem(65, "mm")); //May 2010
- row.append(new QDataItem(26, "mm")); //June 2010
- row.append(new QDataItem(134, "mm")); //July 2010
- row.append(new QDataItem(57, "mm")); //August 2010
- row.append(new QDataItem(51, "mm")); //September 2010
- row.append(new QDataItem(53, "mm")); //October 2010
- row.append(new QDataItem(8, "mm")); //November 2010
- row.append(new QDataItem(9, "mm")); //December 2010
- data.append(row);
- row.clear();
- // 2011
- row.append(new QDataItem(34, "mm")); //January 2011
- row.append(new QDataItem(20, "mm")); //February 2011
- row.append(new QDataItem(30, "mm")); //March 2011
- row.append(new QDataItem(31, "mm")); //April 2011
- row.append(new QDataItem(42, "mm")); //May 2011
- row.append(new QDataItem(78, "mm")); //June 2011
- row.append(new QDataItem(85, "mm")); //July 2011
- row.append(new QDataItem(33, "mm")); //August 2011
- row.append(new QDataItem(42, "mm")); //September 2011
- row.append(new QDataItem(87, "mm")); //October 2011
- row.append(new QDataItem(41, "mm")); //November 2011
- row.append(new QDataItem(72, "mm")); //December 2011
- data.append(row);
- row.clear();
- // 2012
- row.append(new QDataItem(32, "mm")); //January 2012
- row.append(new QDataItem(42, "mm")); //February 2012
- row.append(new QDataItem(30, "mm")); //March 2012
- row.append(new QDataItem(50, "mm")); //April 2012
- row.append(new QDataItem(30, "mm")); //May 2012
- row.append(new QDataItem(70, "mm")); //June 2012
- row.append(new QDataItem(52, "mm")); //July 2012
- row.append(new QDataItem(20, "mm")); //August 2012
- row.append(new QDataItem(99, "mm")); //September 2012
- row.append(new QDataItem(70, "mm")); //October 2012
- row.append(new QDataItem(69, "mm")); //November 2012
- row.append(new QDataItem(49, "mm")); //December 2012
- data.append(row);
- row.clear();
-
- // TODO QDataSet reverses the data in rows and columns when you add it, so results are now mirrored.
- qWarning() << "Example broken! QDataSet mirrors data, rows and columns will not be correct!";
- QOldDataProxy *proxy = new QOldDataProxy;
- m_chart->setDataProxy(proxy);
- static_cast<QOldDataProxy *>(m_chart->dataProxy())->addDataSet(data);
+ QVariantDataSet *dataSet = new QVariantDataSet;
+ QVariantDataItemList *itemList = new QVariantDataItemList;
+ QTextStream stream;
+ QFile dataFile(":/data/raindata.txt");
+ if (dataFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
+ stream.setDevice(&dataFile);
+ while (!stream.atEnd()) {
+ QString line = stream.readLine();
+ if (line.startsWith("#"))
+ continue;
+ QStringList strList = line.split(",", QString::SkipEmptyParts);
+ if (strList.size() < 3) {
+ qWarning() << "Invalid row read from data:" << line;
+ continue;
+ }
+ QVariantDataItem *newItem = new QVariantDataItem;
+ for (int i = 0; i < 3; i++)
+ newItem->append(strList.at(i));
+ itemList->append(newItem);
+ }
+ } else {
+ qWarning() << "Unable to open data file:" << dataFile.fileName();
+ }
+
+ dataSet->addItems(itemList);
+
+ static_cast<QVariantBarDataProxy *>(m_chart->dataProxy())->setDataSet(dataSet);
+
+ // In data file the months are in numeric format, so create custom list
+ QStringList numericMonths;
+ for (int i = 1; i <= 12; i++)
+ numericMonths << QString::number(i);
+
+ QVariantBarMapping mappings;
+ mappings[QVariantBarMappingItem::MapRow] = QVariantBarMappingItem(0, m_years);
+ mappings[QVariantBarMappingItem::MapColumn] = QVariantBarMappingItem(1, numericMonths);
+ mappings[QVariantBarMappingItem::MapValue] = QVariantBarMappingItem(2);
+ static_cast<QVariantBarDataProxy *>(m_chart->dataProxy())->setMappings(mappings);
}
int main(int argc, char **argv)
diff --git a/examples/rainfall/rainfall.pro b/examples/rainfall/rainfall.pro
index 668b5195..f81793ee 100644
--- a/examples/rainfall/rainfall.pro
+++ b/examples/rainfall/rainfall.pro
@@ -5,3 +5,8 @@
SOURCES += main.cpp
INSTALLS += target
+
+RESOURCES += \
+ rainfall.qrc
+
+OTHER_FILES += data/raindata.txt
diff --git a/examples/rainfall/rainfall.qrc b/examples/rainfall/rainfall.qrc
new file mode 100644
index 00000000..53cd4915
--- /dev/null
+++ b/examples/rainfall/rainfall.qrc
@@ -0,0 +1,5 @@
+<RCC>
+ <qresource prefix="/">
+ <file>data/raindata.txt</file>
+ </qresource>
+</RCC>