<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>graphmodifier.cpp Example File | Qt Data Visualization 5.12.2</title> <link rel="stylesheet" type="text/css" href="style/offline-simple.css" /> <script type="text/javascript"> document.getElementsByTagName("link").item(0).setAttribute("href", "style/offline.css"); // loading style sheet breaks anchors that were jumped to before // so force jumping to anchor again setTimeout(function() { var anchor = location.hash; // need to jump to different anchor first (e.g. none) location.hash = "#"; setTimeout(function() { location.hash = anchor; }, 0); }, 0); </script> </head> <body> <div class="header" id="qtdocheader"> <div class="main"> <div class="main-rounded"> <div class="navigationbar"> <table><tr> <td >Qt 5.12</td><td ><a href="qtdatavisualization-index.html">Qt Data Visualization</a></td><td ><a href="qtdatavisualization-bars-example.html">Bars Example</a></td><td >graphmodifier.cpp Example File</td></tr></table><table class="buildversion"><tr> <td id="buildversion" width="100%" align="right"><a href="qtdatavisualization-index.html">Qt Data Visualization | Commercial or GPLv3</a></td> </tr></table> </div> </div> <div class="content"> <div class="line"> <div class="content mainContent"> <div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div> <h1 class="title">graphmodifier.cpp Example File</h1> <span class="subtitle">bars/graphmodifier.cpp</span> <!-- $$$bars/graphmodifier.cpp-description --> <div class="descr"> <a name="details"></a> <pre class="cpp"> <span class="comment">/**************************************************************************** ** ** Copyright (C) 2016 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Data Visualization module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:GPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3 or (at your option) any later version ** approved by the KDE Free Qt Foundation. The licenses are as published by ** the Free Software Foundation and appearing in the file LICENSE.GPL3 ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/</span> <span class="preprocessor">#include "graphmodifier.h"</span> <span class="preprocessor">#include <QtDataVisualization/qcategory3daxis.h></span> <span class="preprocessor">#include <QtDataVisualization/qvalue3daxis.h></span> <span class="preprocessor">#include <QtDataVisualization/qbardataproxy.h></span> <span class="preprocessor">#include <QtDataVisualization/q3dscene.h></span> <span class="preprocessor">#include <QtDataVisualization/q3dcamera.h></span> <span class="preprocessor">#include <QtDataVisualization/qbar3dseries.h></span> <span class="preprocessor">#include <QtDataVisualization/q3dtheme.h></span> <span class="preprocessor">#include <QtCore/QTime></span> <span class="preprocessor">#include <QtWidgets/QComboBox></span> <span class="preprocessor">#include <QtCore/qmath.h></span> <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="type">QtDataVisualization</span>; <span class="keyword">const</span> <span class="type">QString</span> celsiusString <span class="operator">=</span> <span class="type">QString</span>(<span class="type">QChar</span>(<span class="number">0xB0</span>)) <span class="operator">+</span> <span class="string">"C"</span>; GraphModifier<span class="operator">::</span>GraphModifier(<span class="type"><a href="q3dbars.html">Q3DBars</a></span> <span class="operator">*</span>bargraph) : m_graph(bargraph)<span class="operator">,</span> m_xRotation(<span class="number">0.0f</span>)<span class="operator">,</span> m_yRotation(<span class="number">0.0f</span>)<span class="operator">,</span> m_fontSize(<span class="number">30</span>)<span class="operator">,</span> m_segments(<span class="number">4</span>)<span class="operator">,</span> m_subSegments(<span class="number">3</span>)<span class="operator">,</span> m_minval(<span class="operator">-</span><span class="number">20.0f</span>)<span class="operator">,</span> m_maxval(<span class="number">20.0f</span>)<span class="operator">,</span> m_temperatureAxis(<span class="keyword">new</span> QValue3DAxis)<span class="operator">,</span> m_yearAxis(<span class="keyword">new</span> QCategory3DAxis)<span class="operator">,</span> m_monthAxis(<span class="keyword">new</span> QCategory3DAxis)<span class="operator">,</span> m_primarySeries(<span class="keyword">new</span> QBar3DSeries)<span class="operator">,</span> m_secondarySeries(<span class="keyword">new</span> QBar3DSeries)<span class="operator">,</span> m_barMesh(QAbstract3DSeries<span class="operator">::</span>MeshBevelBar)<span class="operator">,</span> m_smooth(<span class="keyword">false</span>) { m_graph<span class="operator">-</span><span class="operator">></span>setShadowQuality(QAbstract3DGraph<span class="operator">::</span>ShadowQualitySoftMedium); m_graph<span class="operator">-</span><span class="operator">></span>activeTheme()<span class="operator">-</span><span class="operator">></span>setBackgroundEnabled(<span class="keyword">false</span>); m_graph<span class="operator">-</span><span class="operator">></span>activeTheme()<span class="operator">-</span><span class="operator">></span>setFont(<span class="type">QFont</span>(<span class="string">"Times New Roman"</span><span class="operator">,</span> m_fontSize)); m_graph<span class="operator">-</span><span class="operator">></span>activeTheme()<span class="operator">-</span><span class="operator">></span>setLabelBackgroundEnabled(<span class="keyword">true</span>); m_graph<span class="operator">-</span><span class="operator">></span>setMultiSeriesUniform(<span class="keyword">true</span>); m_months <span class="operator"><</span><span class="operator"><</span> <span class="string">"January"</span> <span class="operator"><</span><span class="operator"><</span> <span class="string">"February"</span> <span class="operator"><</span><span class="operator"><</span> <span class="string">"March"</span> <span class="operator"><</span><span class="operator"><</span> <span class="string">"April"</span> <span class="operator"><</span><span class="operator"><</span> <span class="string">"May"</span> <span class="operator"><</span><span class="operator"><</span> <span class="string">"June"</span> <span class="operator"><</span><span class="operator"><</span> <span class="string">"July"</span> <span class="operator"><</span><span class="operator"><</span> <span class="string">"August"</span> <span class="operator"><</span><span class="operator"><</span> <span class="string">"September"</span> <span class="operator"><</span><span class="operator"><</span> <span class="string">"October"</span> <span class="operator"><</span><span class="operator"><</span> <span class="string">"November"</span> <span class="operator"><</span><span class="operator"><</span> <span class="string">"December"</span>; m_years <span class="operator"><</span><span class="operator"><</span> <span class="string">"2006"</span> <span class="operator"><</span><span class="operator"><</span> <span class="string">"2007"</span> <span class="operator"><</span><span class="operator"><</span> <span class="string">"2008"</span> <span class="operator"><</span><span class="operator"><</span> <span class="string">"2009"</span> <span class="operator"><</span><span class="operator"><</span> <span class="string">"2010"</span> <span class="operator"><</span><span class="operator"><</span> <span class="string">"2011"</span> <span class="operator"><</span><span class="operator"><</span> <span class="string">"2012"</span> <span class="operator"><</span><span class="operator"><</span> <span class="string">"2013"</span>; m_temperatureAxis<span class="operator">-</span><span class="operator">></span>setTitle(<span class="string">"Average temperature"</span>); m_temperatureAxis<span class="operator">-</span><span class="operator">></span>setSegmentCount(m_segments); m_temperatureAxis<span class="operator">-</span><span class="operator">></span>setSubSegmentCount(m_subSegments); m_temperatureAxis<span class="operator">-</span><span class="operator">></span>setRange(m_minval<span class="operator">,</span> m_maxval); m_temperatureAxis<span class="operator">-</span><span class="operator">></span>setLabelFormat(<span class="type">QString</span>(<span class="type">QStringLiteral</span>(<span class="string">"%.1f "</span>) <span class="operator">+</span> celsiusString)); m_temperatureAxis<span class="operator">-</span><span class="operator">></span>setLabelAutoRotation(<span class="number">30.0f</span>); m_temperatureAxis<span class="operator">-</span><span class="operator">></span>setTitleVisible(<span class="keyword">true</span>); m_yearAxis<span class="operator">-</span><span class="operator">></span>setTitle(<span class="string">"Year"</span>); m_yearAxis<span class="operator">-</span><span class="operator">></span>setLabelAutoRotation(<span class="number">30.0f</span>); m_yearAxis<span class="operator">-</span><span class="operator">></span>setTitleVisible(<span class="keyword">true</span>); m_monthAxis<span class="operator">-</span><span class="operator">></span>setTitle(<span class="string">"Month"</span>); m_monthAxis<span class="operator">-</span><span class="operator">></span>setLabelAutoRotation(<span class="number">30.0f</span>); m_monthAxis<span class="operator">-</span><span class="operator">></span>setTitleVisible(<span class="keyword">true</span>); m_graph<span class="operator">-</span><span class="operator">></span>setValueAxis(m_temperatureAxis); m_graph<span class="operator">-</span><span class="operator">></span>setRowAxis(m_yearAxis); m_graph<span class="operator">-</span><span class="operator">></span>setColumnAxis(m_monthAxis); m_primarySeries<span class="operator">-</span><span class="operator">></span>setItemLabelFormat(<span class="type">QStringLiteral</span>(<span class="string">"Oulu - @colLabel @rowLabel: @valueLabel"</span>)); m_primarySeries<span class="operator">-</span><span class="operator">></span>setMesh(QAbstract3DSeries<span class="operator">::</span>MeshBevelBar); m_primarySeries<span class="operator">-</span><span class="operator">></span>setMeshSmooth(<span class="keyword">false</span>); m_secondarySeries<span class="operator">-</span><span class="operator">></span>setItemLabelFormat(<span class="type">QStringLiteral</span>(<span class="string">"Helsinki - @colLabel @rowLabel: @valueLabel"</span>)); m_secondarySeries<span class="operator">-</span><span class="operator">></span>setMesh(QAbstract3DSeries<span class="operator">::</span>MeshBevelBar); m_secondarySeries<span class="operator">-</span><span class="operator">></span>setMeshSmooth(<span class="keyword">false</span>); m_secondarySeries<span class="operator">-</span><span class="operator">></span>setVisible(<span class="keyword">false</span>); m_graph<span class="operator">-</span><span class="operator">></span>addSeries(m_primarySeries); m_graph<span class="operator">-</span><span class="operator">></span>addSeries(m_secondarySeries); changePresetCamera(); resetTemperatureData(); <span class="comment">// Set up property animations for zooming to the selected bar</span> <span class="type"><a href="q3dcamera.html">Q3DCamera</a></span> <span class="operator">*</span>camera <span class="operator">=</span> m_graph<span class="operator">-</span><span class="operator">></span>scene()<span class="operator">-</span><span class="operator">></span>activeCamera(); m_defaultAngleX <span class="operator">=</span> camera<span class="operator">-</span><span class="operator">></span>xRotation(); m_defaultAngleY <span class="operator">=</span> camera<span class="operator">-</span><span class="operator">></span>yRotation(); m_defaultZoom <span class="operator">=</span> camera<span class="operator">-</span><span class="operator">></span>zoomLevel(); m_defaultTarget <span class="operator">=</span> camera<span class="operator">-</span><span class="operator">></span>target(); m_animationCameraX<span class="operator">.</span>setTargetObject(camera); m_animationCameraY<span class="operator">.</span>setTargetObject(camera); m_animationCameraZoom<span class="operator">.</span>setTargetObject(camera); m_animationCameraTarget<span class="operator">.</span>setTargetObject(camera); m_animationCameraX<span class="operator">.</span>setPropertyName(<span class="string">"xRotation"</span>); m_animationCameraY<span class="operator">.</span>setPropertyName(<span class="string">"yRotation"</span>); m_animationCameraZoom<span class="operator">.</span>setPropertyName(<span class="string">"zoomLevel"</span>); m_animationCameraTarget<span class="operator">.</span>setPropertyName(<span class="string">"target"</span>); <span class="type">int</span> duration <span class="operator">=</span> <span class="number">1700</span>; m_animationCameraX<span class="operator">.</span>setDuration(duration); m_animationCameraY<span class="operator">.</span>setDuration(duration); m_animationCameraZoom<span class="operator">.</span>setDuration(duration); m_animationCameraTarget<span class="operator">.</span>setDuration(duration); <span class="comment">// The zoom always first zooms out above the graph and then zooms in</span> <span class="type">qreal</span> zoomOutFraction <span class="operator">=</span> <span class="number">0.3</span>; m_animationCameraX<span class="operator">.</span>setKeyValueAt(zoomOutFraction<span class="operator">,</span> <span class="type">QVariant</span><span class="operator">::</span>fromValue(<span class="number">0.0f</span>)); m_animationCameraY<span class="operator">.</span>setKeyValueAt(zoomOutFraction<span class="operator">,</span> <span class="type">QVariant</span><span class="operator">::</span>fromValue(<span class="number">90.0f</span>)); m_animationCameraZoom<span class="operator">.</span>setKeyValueAt(zoomOutFraction<span class="operator">,</span> <span class="type">QVariant</span><span class="operator">::</span>fromValue(<span class="number">50.0f</span>)); m_animationCameraTarget<span class="operator">.</span>setKeyValueAt(zoomOutFraction<span class="operator">,</span> <span class="type">QVariant</span><span class="operator">::</span>fromValue(QVector3D(<span class="number">0.0f</span><span class="operator">,</span> <span class="number">0.0f</span><span class="operator">,</span> <span class="number">0.0f</span>))); } GraphModifier<span class="operator">::</span><span class="operator">~</span>GraphModifier() { <span class="keyword">delete</span> m_graph; } <span class="type">void</span> GraphModifier<span class="operator">::</span>resetTemperatureData() { <span class="comment">// Set up data</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="type">float</span> tempOulu<span class="operator">[</span><span class="number">8</span><span class="operator">]</span><span class="operator">[</span><span class="number">12</span><span class="operator">]</span> <span class="operator">=</span> { {<span class="operator">-</span><span class="number">6.7f</span><span class="operator">,</span> <span class="operator">-</span><span class="number">11.7f</span><span class="operator">,</span> <span class="operator">-</span><span class="number">9.7f</span><span class="operator">,</span> <span class="number">3.3f</span><span class="operator">,</span> <span class="number">9.2f</span><span class="operator">,</span> <span class="number">14.0f</span><span class="operator">,</span> <span class="number">16.3f</span><span class="operator">,</span> <span class="number">17.8f</span><span class="operator">,</span> <span class="number">10.2f</span><span class="operator">,</span> <span class="number">2.1f</span><span class="operator">,</span> <span class="operator">-</span><span class="number">2.6f</span><span class="operator">,</span> <span class="operator">-</span><span class="number">0.3f</span>}<span class="operator">,</span> <span class="comment">// 2006</span> {<span class="operator">-</span><span class="number">6.8f</span><span class="operator">,</span> <span class="operator">-</span><span class="number">13.3f</span><span class="operator">,</span> <span class="number">0.2f</span><span class="operator">,</span> <span class="number">1.5f</span><span class="operator">,</span> <span class="number">7.9f</span><span class="operator">,</span> <span class="number">13.4f</span><span class="operator">,</span> <span class="number">16.1f</span><span class="operator">,</span> <span class="number">15.5f</span><span class="operator">,</span> <span class="number">8.2f</span><span class="operator">,</span> <span class="number">5.4f</span><span class="operator">,</span> <span class="operator">-</span><span class="number">2.6f</span><span class="operator">,</span> <span class="operator">-</span><span class="number">0.8f</span>}<span class="operator">,</span> <span class="comment">// 2007</span> {<span class="operator">-</span><span class="number">4.2f</span><span class="operator">,</span> <span class="operator">-</span><span class="number">4.0f</span><span class="operator">,</span> <span class="operator">-</span><span class="number">4.6f</span><span class="operator">,</span> <span class="number">1.9f</span><span class="operator">,</span> <span class="number">7.3f</span><span class="operator">,</span> <span class="number">12.5f</span><span class="operator">,</span> <span class="number">15.0f</span><span class="operator">,</span> <span class="number">12.8f</span><span class="operator">,</span> <span class="number">7.6f</span><span class="operator">,</span> <span class="number">5.1f</span><span class="operator">,</span> <span class="operator">-</span><span class="number">0.9f</span><span class="operator">,</span> <span class="operator">-</span><span class="number">1.3f</span>}<span class="operator">,</span> <span class="comment">// 2008</span> {<span class="operator">-</span><span class="number">7.8f</span><span class="operator">,</span> <span class="operator">-</span><span class="number">8.8f</span><span class="operator">,</span> <span class="operator">-</span><span class="number">4.2f</span><span class="operator">,</span> <span class="number">0.7f</span><span class="operator">,</span> <span class="number">9.3f</span><span class="operator">,</span> <span class="number">13.2f</span><span class="operator">,</span> <span class="number">15.8f</span><span class="operator">,</span> <span class="number">15.5f</span><span class="operator">,</span> <span class="number">11.2f</span><span class="operator">,</span> <span class="number">0.6f</span><span class="operator">,</span> <span class="number">0.7f</span><span class="operator">,</span> <span class="operator">-</span><span class="number">8.4f</span>}<span class="operator">,</span> <span class="comment">// 2009</span> {<span class="operator">-</span><span class="number">14.4f</span><span class="operator">,</span> <span class="operator">-</span><span class="number">12.1f</span><span class="operator">,</span> <span class="operator">-</span><span class="number">7.0f</span><span class="operator">,</span> <span class="number">2.3f</span><span class="operator">,</span> <span class="number">11.0f</span><span class="operator">,</span> <span class="number">12.6f</span><span class="operator">,</span> <span class="number">18.8f</span><span class="operator">,</span> <span class="number">13.8f</span><span class="operator">,</span> <span class="number">9.4f</span><span class="operator">,</span> <span class="number">3.9f</span><span class="operator">,</span> <span class="operator">-</span><span class="number">5.6f</span><span class="operator">,</span> <span class="operator">-</span><span class="number">13.0f</span>}<span class="operator">,</span> <span class="comment">// 2010</span> {<span class="operator">-</span><span class="number">9.0f</span><span class="operator">,</span> <span class="operator">-</span><span class="number">15.2f</span><span class="operator">,</span> <span class="operator">-</span><span class="number">3.8f</span><span class="operator">,</span> <span class="number">2.6f</span><span class="operator">,</span> <span class="number">8.3f</span><span class="operator">,</span> <span class="number">15.9f</span><span class="operator">,</span> <span class="number">18.6f</span><span class="operator">,</span> <span class="number">14.9f</span><span class="operator">,</span> <span class="number">11.1f</span><span class="operator">,</span> <span class="number">5.3f</span><span class="operator">,</span> <span class="number">1.8f</span><span class="operator">,</span> <span class="operator">-</span><span class="number">0.2f</span>}<span class="operator">,</span> <span class="comment">// 2011</span> {<span class="operator">-</span><span class="number">8.7f</span><span class="operator">,</span> <span class="operator">-</span><span class="number">11.3f</span><span class="operator">,</span> <span class="operator">-</span><span class="number">2.3f</span><span class="operator">,</span> <span class="number">0.4f</span><span class="operator">,</span> <span class="number">7.5f</span><span class="operator">,</span> <span class="number">12.2f</span><span class="operator">,</span> <span class="number">16.4f</span><span class="operator">,</span> <span class="number">14.1f</span><span class="operator">,</span> <span class="number">9.2f</span><span class="operator">,</span> <span class="number">3.1f</span><span class="operator">,</span> <span class="number">0.3f</span><span class="operator">,</span> <span class="operator">-</span><span class="number">12.1f</span>}<span class="operator">,</span> <span class="comment">// 2012</span> {<span class="operator">-</span><span class="number">7.9f</span><span class="operator">,</span> <span class="operator">-</span><span class="number">5.3f</span><span class="operator">,</span> <span class="operator">-</span><span class="number">9.1f</span><span class="operator">,</span> <span class="number">0.8f</span><span class="operator">,</span> <span class="number">11.6f</span><span class="operator">,</span> <span class="number">16.6f</span><span class="operator">,</span> <span class="number">15.9f</span><span class="operator">,</span> <span class="number">15.5f</span><span class="operator">,</span> <span class="number">11.2f</span><span class="operator">,</span> <span class="number">4.0f</span><span class="operator">,</span> <span class="number">0.1f</span><span class="operator">,</span> <span class="operator">-</span><span class="number">1.9f</span>} <span class="comment">// 2013</span> }; <span class="keyword">static</span> <span class="keyword">const</span> <span class="type">float</span> tempHelsinki<span class="operator">[</span><span class="number">8</span><span class="operator">]</span><span class="operator">[</span><span class="number">12</span><span class="operator">]</span> <span class="operator">=</span> { {<span class="operator">-</span><span class="number">3.7f</span><span class="operator">,</span> <span class="operator">-</span><span class="number">7.8f</span><span class="operator">,</span> <span class="operator">-</span><span class="number">5.4f</span><span class="operator">,</span> <span class="number">3.4f</span><span class="operator">,</span> <span class="number">10.7f</span><span class="operator">,</span> <span class="number">15.4f</span><span class="operator">,</span> <span class="number">18.6f</span><span class="operator">,</span> <span class="number">18.7f</span><span class="operator">,</span> <span class="number">14.3f</span><span class="operator">,</span> <span class="number">8.5f</span><span class="operator">,</span> <span class="number">2.9f</span><span class="operator">,</span> <span class="number">4.1f</span>}<span class="operator">,</span> <span class="comment">// 2006</span> {<span class="operator">-</span><span class="number">1.2f</span><span class="operator">,</span> <span class="operator">-</span><span class="number">7.5f</span><span class="operator">,</span> <span class="number">3.1f</span><span class="operator">,</span> <span class="number">5.5f</span><span class="operator">,</span> <span class="number">10.3f</span><span class="operator">,</span> <span class="number">15.9f</span><span class="operator">,</span> <span class="number">17.4f</span><span class="operator">,</span> <span class="number">17.9f</span><span class="operator">,</span> <span class="number">11.2f</span><span class="operator">,</span> <span class="number">7.3f</span><span class="operator">,</span> <span class="number">1.1f</span><span class="operator">,</span> <span class="number">0.5f</span>}<span class="operator">,</span> <span class="comment">// 2007</span> {<span class="operator">-</span><span class="number">0.6f</span><span class="operator">,</span> <span class="number">1.2f</span><span class="operator">,</span> <span class="number">0.2f</span><span class="operator">,</span> <span class="number">6.3f</span><span class="operator">,</span> <span class="number">10.2f</span><span class="operator">,</span> <span class="number">13.8f</span><span class="operator">,</span> <span class="number">18.1f</span><span class="operator">,</span> <span class="number">15.1f</span><span class="operator">,</span> <span class="number">10.1f</span><span class="operator">,</span> <span class="number">9.4f</span><span class="operator">,</span> <span class="number">2.5f</span><span class="operator">,</span> <span class="number">0.4f</span>}<span class="operator">,</span> <span class="comment">// 2008</span> {<span class="operator">-</span><span class="number">2.9f</span><span class="operator">,</span> <span class="operator">-</span><span class="number">3.5f</span><span class="operator">,</span> <span class="operator">-</span><span class="number">0.9f</span><span class="operator">,</span> <span class="number">4.7f</span><span class="operator">,</span> <span class="number">10.9f</span><span class="operator">,</span> <span class="number">14.0f</span><span class="operator">,</span> <span class="number">17.4f</span><span class="operator">,</span> <span class="number">16.8f</span><span class="operator">,</span> <span class="number">13.2f</span><span class="operator">,</span> <span class="number">4.1f</span><span class="operator">,</span> <span class="number">2.6f</span><span class="operator">,</span> <span class="operator">-</span><span class="number">2.3f</span>}<span class="operator">,</span> <span class="comment">// 2009</span> {<span class="operator">-</span><span class="number">10.2f</span><span class="operator">,</span> <span class="operator">-</span><span class="number">8.0f</span><span class="operator">,</span> <span class="operator">-</span><span class="number">1.9f</span><span class="operator">,</span> <span class="number">6.6f</span><span class="operator">,</span> <span class="number">11.3f</span><span class="operator">,</span> <span class="number">14.5f</span><span class="operator">,</span> <span class="number">21.0f</span><span class="operator">,</span> <span class="number">18.8f</span><span class="operator">,</span> <span class="number">12.6f</span><span class="operator">,</span> <span class="number">6.1f</span><span class="operator">,</span> <span class="operator">-</span><span class="number">0.5f</span><span class="operator">,</span> <span class="operator">-</span><span class="number">7.3f</span>}<span class="operator">,</span> <span class="comment">// 2010</span> {<span class="operator">-</span><span class="number">4.4f</span><span class="operator">,</span> <span class="operator">-</span><span class="number">9.1f</span><span class="operator">,</span> <span class="operator">-</span><span class="number">2.0f</span><span class="operator">,</span> <span class="number">5.5f</span><span class="operator">,</span> <span class="number">9.9f</span><span class="operator">,</span> <span class="number">15.6f</span><span class="operator">,</span> <span class="number">20.8f</span><span class="operator">,</span> <span class="number">17.8f</span><span class="operator">,</span> <span class="number">13.4f</span><span class="operator">,</span> <span class="number">8.9f</span><span class="operator">,</span> <span class="number">3.6f</span><span class="operator">,</span> <span class="number">1.5f</span>}<span class="operator">,</span> <span class="comment">// 2011</span> {<span class="operator">-</span><span class="number">3.5f</span><span class="operator">,</span> <span class="operator">-</span><span class="number">3.2f</span><span class="operator">,</span> <span class="operator">-</span><span class="number">0.7f</span><span class="operator">,</span> <span class="number">4.0f</span><span class="operator">,</span> <span class="number">11.1f</span><span class="operator">,</span> <span class="number">13.4f</span><span class="operator">,</span> <span class="number">17.3f</span><span class="operator">,</span> <span class="number">15.8f</span><span class="operator">,</span> <span class="number">13.1f</span><span class="operator">,</span> <span class="number">6.4f</span><span class="operator">,</span> <span class="number">4.1f</span><span class="operator">,</span> <span class="operator">-</span><span class="number">5.1f</span>}<span class="operator">,</span> <span class="comment">// 2012</span> {<span class="operator">-</span><span class="number">4.8f</span><span class="operator">,</span> <span class="operator">-</span><span class="number">1.8f</span><span class="operator">,</span> <span class="operator">-</span><span class="number">5.0f</span><span class="operator">,</span> <span class="number">2.9f</span><span class="operator">,</span> <span class="number">12.8f</span><span class="operator">,</span> <span class="number">17.2f</span><span class="operator">,</span> <span class="number">18.0f</span><span class="operator">,</span> <span class="number">17.1f</span><span class="operator">,</span> <span class="number">12.5f</span><span class="operator">,</span> <span class="number">7.5f</span><span class="operator">,</span> <span class="number">4.5f</span><span class="operator">,</span> <span class="number">2.3f</span>} <span class="comment">// 2013</span> }; <span class="comment">// Create data arrays</span> <span class="type"><a href="qbardataproxy.html#QBarDataArray-typedef">QBarDataArray</a></span> <span class="operator">*</span>dataSet <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qbardataproxy.html#QBarDataArray-typedef">QBarDataArray</a></span>; <span class="type"><a href="qbardataproxy.html#QBarDataArray-typedef">QBarDataArray</a></span> <span class="operator">*</span>dataSet2 <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qbardataproxy.html#QBarDataArray-typedef">QBarDataArray</a></span>; <span class="type"><a href="qbardataproxy.html#QBarDataRow-typedef">QBarDataRow</a></span> <span class="operator">*</span>dataRow; <span class="type"><a href="qbardataproxy.html#QBarDataRow-typedef">QBarDataRow</a></span> <span class="operator">*</span>dataRow2; dataSet<span class="operator">-</span><span class="operator">></span>reserve(m_years<span class="operator">.</span>size()); <span class="keyword">for</span> (<span class="type">int</span> year <span class="operator">=</span> <span class="number">0</span>; year <span class="operator"><</span> m_years<span class="operator">.</span>size(); year<span class="operator">+</span><span class="operator">+</span>) { <span class="comment">// Create a data row</span> dataRow <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qbardataproxy.html#QBarDataRow-typedef">QBarDataRow</a></span>(m_months<span class="operator">.</span>size()); dataRow2 <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qbardataproxy.html#QBarDataRow-typedef">QBarDataRow</a></span>(m_months<span class="operator">.</span>size()); <span class="keyword">for</span> (<span class="type">int</span> month <span class="operator">=</span> <span class="number">0</span>; month <span class="operator"><</span> m_months<span class="operator">.</span>size(); month<span class="operator">+</span><span class="operator">+</span>) { <span class="comment">// Add data to the row</span> (<span class="operator">*</span>dataRow)<span class="operator">[</span>month<span class="operator">]</span><span class="operator">.</span>setValue(tempOulu<span class="operator">[</span>year<span class="operator">]</span><span class="operator">[</span>month<span class="operator">]</span>); (<span class="operator">*</span>dataRow2)<span class="operator">[</span>month<span class="operator">]</span><span class="operator">.</span>setValue(tempHelsinki<span class="operator">[</span>year<span class="operator">]</span><span class="operator">[</span>month<span class="operator">]</span>); } <span class="comment">// Add the row to the set</span> dataSet<span class="operator">-</span><span class="operator">></span>append(dataRow); dataSet2<span class="operator">-</span><span class="operator">></span>append(dataRow2); } <span class="comment">// Add data to the data proxy (the data proxy assumes ownership of it)</span> m_primarySeries<span class="operator">-</span><span class="operator">></span>dataProxy()<span class="operator">-</span><span class="operator">></span>resetArray(dataSet<span class="operator">,</span> m_years<span class="operator">,</span> m_months); m_secondarySeries<span class="operator">-</span><span class="operator">></span>dataProxy()<span class="operator">-</span><span class="operator">></span>resetArray(dataSet2<span class="operator">,</span> m_years<span class="operator">,</span> m_months); } <span class="type">void</span> GraphModifier<span class="operator">::</span>changeRange(<span class="type">int</span> range) { <span class="keyword">if</span> (range <span class="operator">></span><span class="operator">=</span> m_years<span class="operator">.</span>count()) m_yearAxis<span class="operator">-</span><span class="operator">></span>setRange(<span class="number">0</span><span class="operator">,</span> m_years<span class="operator">.</span>count() <span class="operator">-</span> <span class="number">1</span>); <span class="keyword">else</span> m_yearAxis<span class="operator">-</span><span class="operator">></span>setRange(range<span class="operator">,</span> range); } <span class="type">void</span> GraphModifier<span class="operator">::</span>changeStyle(<span class="type">int</span> style) { <span class="type">QComboBox</span> <span class="operator">*</span>comboBox <span class="operator">=</span> qobject_cast<span class="operator"><</span><span class="type">QComboBox</span> <span class="operator">*</span><span class="operator">></span>(sender()); <span class="keyword">if</span> (comboBox) { m_barMesh <span class="operator">=</span> QAbstract3DSeries<span class="operator">::</span>Mesh(comboBox<span class="operator">-</span><span class="operator">></span>itemData(style)<span class="operator">.</span>toInt()); m_primarySeries<span class="operator">-</span><span class="operator">></span>setMesh(m_barMesh); m_secondarySeries<span class="operator">-</span><span class="operator">></span>setMesh(m_barMesh); } } <span class="type">void</span> GraphModifier<span class="operator">::</span>changePresetCamera() { m_animationCameraX<span class="operator">.</span>stop(); m_animationCameraY<span class="operator">.</span>stop(); m_animationCameraZoom<span class="operator">.</span>stop(); m_animationCameraTarget<span class="operator">.</span>stop(); <span class="comment">// Restore camera target in case animation has changed it</span> m_graph<span class="operator">-</span><span class="operator">></span>scene()<span class="operator">-</span><span class="operator">></span>activeCamera()<span class="operator">-</span><span class="operator">></span>setTarget(QVector3D(<span class="number">0.0f</span><span class="operator">,</span> <span class="number">0.0f</span><span class="operator">,</span> <span class="number">0.0f</span>)); <span class="keyword">static</span> <span class="type">int</span> preset <span class="operator">=</span> <span class="type"><a href="q3dcamera.html">Q3DCamera</a></span><span class="operator">::</span>CameraPresetFront; m_graph<span class="operator">-</span><span class="operator">></span>scene()<span class="operator">-</span><span class="operator">></span>activeCamera()<span class="operator">-</span><span class="operator">></span>setCameraPreset((<span class="type"><a href="q3dcamera.html">Q3DCamera</a></span><span class="operator">::</span>CameraPreset)preset); <span class="keyword">if</span> (<span class="operator">+</span><span class="operator">+</span>preset <span class="operator">></span> <span class="type"><a href="q3dcamera.html">Q3DCamera</a></span><span class="operator">::</span>CameraPresetDirectlyBelow) preset <span class="operator">=</span> <span class="type"><a href="q3dcamera.html">Q3DCamera</a></span><span class="operator">::</span>CameraPresetFrontLow; } <span class="type">void</span> GraphModifier<span class="operator">::</span>changeTheme(<span class="type">int</span> theme) { <span class="type"><a href="q3dtheme.html">Q3DTheme</a></span> <span class="operator">*</span>currentTheme <span class="operator">=</span> m_graph<span class="operator">-</span><span class="operator">></span>activeTheme(); currentTheme<span class="operator">-</span><span class="operator">></span>setType(<span class="type"><a href="q3dtheme.html">Q3DTheme</a></span><span class="operator">::</span>Theme(theme)); <span class="keyword">emit</span> backgroundEnabledChanged(currentTheme<span class="operator">-</span><span class="operator">></span>isBackgroundEnabled()); <span class="keyword">emit</span> gridEnabledChanged(currentTheme<span class="operator">-</span><span class="operator">></span>isGridEnabled()); <span class="keyword">emit</span> fontChanged(currentTheme<span class="operator">-</span><span class="operator">></span>font()); <span class="keyword">emit</span> fontSizeChanged(currentTheme<span class="operator">-</span><span class="operator">></span>font()<span class="operator">.</span>pointSize()); } <span class="type">void</span> GraphModifier<span class="operator">::</span>changeLabelBackground() { m_graph<span class="operator">-</span><span class="operator">></span>activeTheme()<span class="operator">-</span><span class="operator">></span>setLabelBackgroundEnabled(<span class="operator">!</span>m_graph<span class="operator">-</span><span class="operator">></span>activeTheme()<span class="operator">-</span><span class="operator">></span>isLabelBackgroundEnabled()); } <span class="type">void</span> GraphModifier<span class="operator">::</span>changeSelectionMode(<span class="type">int</span> selectionMode) { <span class="type">QComboBox</span> <span class="operator">*</span>comboBox <span class="operator">=</span> qobject_cast<span class="operator"><</span><span class="type">QComboBox</span> <span class="operator">*</span><span class="operator">></span>(sender()); <span class="keyword">if</span> (comboBox) { <span class="type">int</span> flags <span class="operator">=</span> comboBox<span class="operator">-</span><span class="operator">></span>itemData(selectionMode)<span class="operator">.</span>toInt(); m_graph<span class="operator">-</span><span class="operator">></span>setSelectionMode(QAbstract3DGraph<span class="operator">::</span>SelectionFlags(flags)); } } <span class="type">void</span> GraphModifier<span class="operator">::</span>changeFont(<span class="keyword">const</span> <span class="type">QFont</span> <span class="operator">&</span>font) { <span class="type">QFont</span> newFont <span class="operator">=</span> font; m_graph<span class="operator">-</span><span class="operator">></span>activeTheme()<span class="operator">-</span><span class="operator">></span>setFont(newFont); } <span class="type">void</span> GraphModifier<span class="operator">::</span>changeFontSize(<span class="type">int</span> fontsize) { m_fontSize <span class="operator">=</span> fontsize; <span class="type">QFont</span> font <span class="operator">=</span> m_graph<span class="operator">-</span><span class="operator">></span>activeTheme()<span class="operator">-</span><span class="operator">></span>font(); font<span class="operator">.</span>setPointSize(m_fontSize); m_graph<span class="operator">-</span><span class="operator">></span>activeTheme()<span class="operator">-</span><span class="operator">></span>setFont(font); } <span class="type">void</span> GraphModifier<span class="operator">::</span>shadowQualityUpdatedByVisual(QAbstract3DGraph<span class="operator">::</span>ShadowQuality sq) { <span class="type">int</span> quality <span class="operator">=</span> <span class="type">int</span>(sq); <span class="comment">// Updates the UI component to show correct shadow quality</span> <span class="keyword">emit</span> shadowQualityChanged(quality); } <span class="type">void</span> GraphModifier<span class="operator">::</span>changeLabelRotation(<span class="type">int</span> rotation) { m_temperatureAxis<span class="operator">-</span><span class="operator">></span>setLabelAutoRotation(<span class="type">float</span>(rotation)); m_monthAxis<span class="operator">-</span><span class="operator">></span>setLabelAutoRotation(<span class="type">float</span>(rotation)); m_yearAxis<span class="operator">-</span><span class="operator">></span>setLabelAutoRotation(<span class="type">float</span>(rotation)); } <span class="type">void</span> GraphModifier<span class="operator">::</span>setAxisTitleVisibility(bool enabled) { m_temperatureAxis<span class="operator">-</span><span class="operator">></span>setTitleVisible(enabled); m_monthAxis<span class="operator">-</span><span class="operator">></span>setTitleVisible(enabled); m_yearAxis<span class="operator">-</span><span class="operator">></span>setTitleVisible(enabled); } <span class="type">void</span> GraphModifier<span class="operator">::</span>setAxisTitleFixed(bool enabled) { m_temperatureAxis<span class="operator">-</span><span class="operator">></span>setTitleFixed(enabled); m_monthAxis<span class="operator">-</span><span class="operator">></span>setTitleFixed(enabled); m_yearAxis<span class="operator">-</span><span class="operator">></span>setTitleFixed(enabled); } <span class="type">void</span> GraphModifier<span class="operator">::</span>zoomToSelectedBar() { m_animationCameraX<span class="operator">.</span>stop(); m_animationCameraY<span class="operator">.</span>stop(); m_animationCameraZoom<span class="operator">.</span>stop(); m_animationCameraTarget<span class="operator">.</span>stop(); <span class="type"><a href="q3dcamera.html">Q3DCamera</a></span> <span class="operator">*</span>camera <span class="operator">=</span> m_graph<span class="operator">-</span><span class="operator">></span>scene()<span class="operator">-</span><span class="operator">></span>activeCamera(); <span class="type">float</span> currentX <span class="operator">=</span> camera<span class="operator">-</span><span class="operator">></span>xRotation(); <span class="type">float</span> currentY <span class="operator">=</span> camera<span class="operator">-</span><span class="operator">></span>yRotation(); <span class="type">float</span> currentZoom <span class="operator">=</span> camera<span class="operator">-</span><span class="operator">></span>zoomLevel(); QVector3D currentTarget <span class="operator">=</span> camera<span class="operator">-</span><span class="operator">></span>target(); m_animationCameraX<span class="operator">.</span>setStartValue(<span class="type">QVariant</span><span class="operator">::</span>fromValue(currentX)); m_animationCameraY<span class="operator">.</span>setStartValue(<span class="type">QVariant</span><span class="operator">::</span>fromValue(currentY)); m_animationCameraZoom<span class="operator">.</span>setStartValue(<span class="type">QVariant</span><span class="operator">::</span>fromValue(currentZoom)); m_animationCameraTarget<span class="operator">.</span>setStartValue(<span class="type">QVariant</span><span class="operator">::</span>fromValue(currentTarget)); <span class="type">QPoint</span> selectedBar <span class="operator">=</span> m_graph<span class="operator">-</span><span class="operator">></span>selectedSeries() <span class="operator">?</span> m_graph<span class="operator">-</span><span class="operator">></span>selectedSeries()<span class="operator">-</span><span class="operator">></span>selectedBar() : QBar3DSeries<span class="operator">::</span>invalidSelectionPosition(); <span class="keyword">if</span> (selectedBar <span class="operator">!</span><span class="operator">=</span> QBar3DSeries<span class="operator">::</span>invalidSelectionPosition()) { <span class="comment">// Normalize selected bar position within axis range to determine target coordinates</span> QVector3D endTarget; <span class="type">float</span> xMin <span class="operator">=</span> m_graph<span class="operator">-</span><span class="operator">></span>columnAxis()<span class="operator">-</span><span class="operator">></span>min(); <span class="type">float</span> xRange <span class="operator">=</span> m_graph<span class="operator">-</span><span class="operator">></span>columnAxis()<span class="operator">-</span><span class="operator">></span>max() <span class="operator">-</span> xMin; <span class="type">float</span> zMin <span class="operator">=</span> m_graph<span class="operator">-</span><span class="operator">></span>rowAxis()<span class="operator">-</span><span class="operator">></span>min(); <span class="type">float</span> zRange <span class="operator">=</span> m_graph<span class="operator">-</span><span class="operator">></span>rowAxis()<span class="operator">-</span><span class="operator">></span>max() <span class="operator">-</span> zMin; endTarget<span class="operator">.</span>setX((selectedBar<span class="operator">.</span>y() <span class="operator">-</span> xMin) <span class="operator">/</span> xRange <span class="operator">*</span> <span class="number">2.0f</span> <span class="operator">-</span> <span class="number">1.0f</span>); endTarget<span class="operator">.</span>setZ((selectedBar<span class="operator">.</span>x() <span class="operator">-</span> zMin) <span class="operator">/</span> zRange <span class="operator">*</span> <span class="number">2.0f</span> <span class="operator">-</span> <span class="number">1.0f</span>); <span class="comment">// Rotate the camera so that it always points approximately to the graph center</span> <span class="type">qreal</span> endAngleX <span class="operator">=</span> <span class="number">90.0</span> <span class="operator">-</span> qRadiansToDegrees(qAtan(<span class="type">qreal</span>(endTarget<span class="operator">.</span>z() <span class="operator">/</span> endTarget<span class="operator">.</span>x()))); <span class="keyword">if</span> (endTarget<span class="operator">.</span>x() <span class="operator">></span> <span class="number">0.0f</span>) endAngleX <span class="operator">-</span><span class="operator">=</span> <span class="number">180.0f</span>; <span class="type">float</span> barValue <span class="operator">=</span> m_graph<span class="operator">-</span><span class="operator">></span>selectedSeries()<span class="operator">-</span><span class="operator">></span>dataProxy()<span class="operator">-</span><span class="operator">></span>itemAt(selectedBar<span class="operator">.</span>x()<span class="operator">,</span> selectedBar<span class="operator">.</span>y())<span class="operator">-</span><span class="operator">></span>value(); <span class="type">float</span> endAngleY <span class="operator">=</span> barValue <span class="operator">></span><span class="operator">=</span> <span class="number">0.0f</span> <span class="operator">?</span> <span class="number">30.0f</span> : <span class="operator">-</span><span class="number">30.0f</span>; <span class="keyword">if</span> (m_graph<span class="operator">-</span><span class="operator">></span>valueAxis()<span class="operator">-</span><span class="operator">></span>reversed()) endAngleY <span class="operator">*</span><span class="operator">=</span> <span class="operator">-</span><span class="number">1.0f</span>; m_animationCameraX<span class="operator">.</span>setEndValue(<span class="type">QVariant</span><span class="operator">::</span>fromValue(<span class="type">float</span>(endAngleX))); m_animationCameraY<span class="operator">.</span>setEndValue(<span class="type">QVariant</span><span class="operator">::</span>fromValue(endAngleY)); m_animationCameraZoom<span class="operator">.</span>setEndValue(<span class="type">QVariant</span><span class="operator">::</span>fromValue(<span class="number">250</span>)); m_animationCameraTarget<span class="operator">.</span>setEndValue(<span class="type">QVariant</span><span class="operator">::</span>fromValue(endTarget)); } <span class="keyword">else</span> { <span class="comment">// No selected bar, so return to the default view</span> m_animationCameraX<span class="operator">.</span>setEndValue(<span class="type">QVariant</span><span class="operator">::</span>fromValue(m_defaultAngleX)); m_animationCameraY<span class="operator">.</span>setEndValue(<span class="type">QVariant</span><span class="operator">::</span>fromValue(m_defaultAngleY)); m_animationCameraZoom<span class="operator">.</span>setEndValue(<span class="type">QVariant</span><span class="operator">::</span>fromValue(m_defaultZoom)); m_animationCameraTarget<span class="operator">.</span>setEndValue(<span class="type">QVariant</span><span class="operator">::</span>fromValue(m_defaultTarget)); } m_animationCameraX<span class="operator">.</span>start(); m_animationCameraY<span class="operator">.</span>start(); m_animationCameraZoom<span class="operator">.</span>start(); m_animationCameraTarget<span class="operator">.</span>start(); } <span class="type">void</span> GraphModifier<span class="operator">::</span>changeShadowQuality(<span class="type">int</span> quality) { QAbstract3DGraph<span class="operator">::</span>ShadowQuality sq <span class="operator">=</span> QAbstract3DGraph<span class="operator">::</span>ShadowQuality(quality); m_graph<span class="operator">-</span><span class="operator">></span>setShadowQuality(sq); <span class="keyword">emit</span> shadowQualityChanged(quality); } <span class="type">void</span> GraphModifier<span class="operator">::</span>rotateX(<span class="type">int</span> rotation) { m_xRotation <span class="operator">=</span> rotation; m_graph<span class="operator">-</span><span class="operator">></span>scene()<span class="operator">-</span><span class="operator">></span>activeCamera()<span class="operator">-</span><span class="operator">></span>setCameraPosition(m_xRotation<span class="operator">,</span> m_yRotation); } <span class="type">void</span> GraphModifier<span class="operator">::</span>rotateY(<span class="type">int</span> rotation) { m_yRotation <span class="operator">=</span> rotation; m_graph<span class="operator">-</span><span class="operator">></span>scene()<span class="operator">-</span><span class="operator">></span>activeCamera()<span class="operator">-</span><span class="operator">></span>setCameraPosition(m_xRotation<span class="operator">,</span> m_yRotation); } <span class="type">void</span> GraphModifier<span class="operator">::</span>setBackgroundEnabled(<span class="type">int</span> enabled) { m_graph<span class="operator">-</span><span class="operator">></span>activeTheme()<span class="operator">-</span><span class="operator">></span>setBackgroundEnabled(bool(enabled)); } <span class="type">void</span> GraphModifier<span class="operator">::</span>setGridEnabled(<span class="type">int</span> enabled) { m_graph<span class="operator">-</span><span class="operator">></span>activeTheme()<span class="operator">-</span><span class="operator">></span>setGridEnabled(bool(enabled)); } <span class="type">void</span> GraphModifier<span class="operator">::</span>setSmoothBars(<span class="type">int</span> smooth) { m_smooth <span class="operator">=</span> bool(smooth); m_primarySeries<span class="operator">-</span><span class="operator">></span>setMeshSmooth(m_smooth); m_secondarySeries<span class="operator">-</span><span class="operator">></span>setMeshSmooth(m_smooth); } <span class="type">void</span> GraphModifier<span class="operator">::</span>setSeriesVisibility(<span class="type">int</span> enabled) { m_secondarySeries<span class="operator">-</span><span class="operator">></span>setVisible(bool(enabled)); } <span class="type">void</span> GraphModifier<span class="operator">::</span>setReverseValueAxis(<span class="type">int</span> enabled) { m_graph<span class="operator">-</span><span class="operator">></span>valueAxis()<span class="operator">-</span><span class="operator">></span>setReversed(enabled); } <span class="type">void</span> GraphModifier<span class="operator">::</span>setReflection(bool enabled) { m_graph<span class="operator">-</span><span class="operator">></span>setReflection(enabled); } </pre> </div> <!-- @@@bars/graphmodifier.cpp --> </div> </div> </div> </div> </div> <div class="footer"> <p> <acronym title="Copyright">©</acronym> 2019 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners.<br/> The documentation provided herein is licensed under the terms of the <a href="http://www.gnu.org/licenses/fdl.html">GNU Free Documentation License version 1.3</a> as published by the Free Software Foundation.<br/> Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners. </p> </div> </body> </html>