1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
|
/****************************************************************************
**
** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
** 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 Free Documentation License Usage
** Alternatively, this file may be used under the terms of the GNU Free
** Documentation License version 1.3 as published by the Free Software
** Foundation and appearing in the file included in the packaging of
** this file. Please review the following information to ensure
** the GNU Free Documentation License version 1.3 requirements
** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
** $QT_END_LICENSE$
**
****************************************************************************/
/*!
\title Qt Data Visualization Overview
\page qtdatavisualization-overview.html
\brief An overview of the Qt Data Visualization module.
The Qt Data Visualization module provides a way to develop rapidly
responding, complex, and dynamic 3D visualization for analytical demanding
industries such as academic research and medical. Qt 3D Data Visualization
provides 3D bars, scatter, and surface visualizations. Combining user
interaction and real time 3D drawing visualizations enables creating user
interfaces that use space effectively. Changing between 3D and 2D
presentation enables truly utilizing the value of 3D in visualizing data.
The look and feel of the graphs can be customized by using the predefined
themes or defining new ones. In addition, scenes can be customized by
specifying settings for the camera, and individual items can be customized
by using predefined or user-defined meshes.
Qt Data Visualization offers ready-made data proxies that can be used to
visualize data from Qt item models and height maps. Each graph type has a
basic proxy type, which accepts data in a format suitable for that
visualization. For more information, see \l{Qt Data Visualization Data
Handling}.
End users can interact with the data presented by graphs in several ways,
including rotating graphs, zooming into and out of data, selecting items,
and viewing 2D slices of the 3D data for increased readability. For more
information, see \l{Qt Data Visualization Interacting with Data}.
\section1 Graph Types
The Qt Data Visualization module provides the following 3D graph types:
\list
\li \l{3D Bar Graphs}{3D bar graphs}
\li \l{3D Scatter Graphs}{3D scatter graphs}
\li \l{3D Surface Graphs}{3D surface graphs}
\endlist
The QAbstract3DGraph class subclasses a QWindow and provides a render loop
for its own subclasses that implement the different graph types: Q3DBars,
Q3DScatter, and Q3DSurface. The graph type determines how the data is
presented.
\section2 3D Bar Graphs
3D bar graphs present data as 3D bars that are grouped by category. The
Q3DBars class is used to create a graph and the QBar3DSeries and
QBarDataProxy classes are used to set data to the graph, as well as to
control the visual properties of the graph, such as draw mode and shading.
In QML, the corresponding types are Bars3D, Bar3DSeries, and BarDataProxy.
\image q3dbars-minimal.png
For more information, see \l{How to construct a minimal Q3DBars graph},
\l {Bars Example}, and \l {Qt Quick 2 Bars Example}.
\section2 3D Scatter Graphs
3D scatter graphs present data as a collection of points. The Q3DScatter
class is used to create a graph and the QScatter3DSeries and
QScatterDataProxy classes are used to set data to the graph, as well as to
control the visual properties of the graph. In QML, the corresponding types
are Scatter3D, Scatter3DSeries, and ScatterDataProxy.
\image q3dscatter-minimal.png
For more information, see \l{How to construct a minimal Q3DScatter graph},
\l{Scatter Example}, and \l{Qt Quick 2 Scatter Example}.
\section2 3D Surface Graphs
3D surface graphs present data as 3D surface plots. The Q3DSurface class is
used to create a graph and the QSurface3DSeries and QSurfaceDataProxy
classes are used to set data to the graph, as well as to control the visual
properties of the graph. In QML, the corresponding types are Surface3D,
Surface3DSeries, and SurfaceDataProxy.
\image q3dsurface-minimal.png
For more information, see \l{How to construct a minimal Q3DSurface graph},
\l{Surface Example}, \l{Textured Surface Example}, \l{Qt Quick 2 Surface
Example}, and \l{Qt Quick 2 Surface Multiseries Example}.
\section1 Using OpenGL for Rendering Data
It is recommended to use OpenGL 2.1 or later for data rendering.
If OpenGL ES2 is used (including Angle builds in Windows), the following
features are not supported:
\list
\li Shadows
\li Antialiasing
\li Flat shading for surfaces
\li Volumetric objects, because they use 3D textures
\endlist
Only OpenGL ES2 emulation is available for software renderer (that is, when
using QCoreApplication::setAttribute(Qt::AA_UseSoftwareOpenGL)).
\section2 Selecting Rendering Mode
In QML, you can set the \l{AbstractGraph3D::renderingMode}
{AbstractGraph3D.RenderingMode} property to determine whether the graph will
be rendered directly on the window background or to an offscreen surface
that is then drawn during normal QML item rendering.
Background rendering modes offer slightly better performance than the
indirect rendering mode, at the cost of non-standard QML behavior. For
example, the graphs do not obey the z ordering of QML items and they cannot
be partially transparent. Therefore, changing the rendering mode is a
question of performance versus quality.
Qt Quick 2 uses a dedicated scenegraph for data rendering, and is therefore
the best choice for data visualization.
\section1 3D Axes
Qt Data Visualization supports the following axis types:
\list
\li Value axis
\li Category axis
\endlist
An axis can be set up to show a line or a grid. Both axis types are
specializations of the QAbstract3DAxis class or the AbstractAxis3D QML type.
A value axis can be given a range of values and segment and subsegment
counts to divide the range into. Labels are drawn between each segment.
Grid lines are drawn between each segment and each subsegment. The value
axis is implemented using the QValue3DAxis class or the ValueAxis3D QML type.
A category axis has named ranges and adjustable range widths. It is divided
into equal-sized categories based on the data window size defined by the
axis range. Labels are drawn to the positions of categories, if provided.
Grid lines are drawn between categories, if visible. A category axis is
implemented using the QCategory3DAxis class or the CategoryAxis3D QML type.
If no axes are set explicitly for a graph, temporary default axes with no
labels are created. These default axes can be modified via axis accessors,
but as soon as any axis is set explicitly for a particular orientation, the
default axis for that orientation is destroyed.
All graph types support showing multiple series simultaneously. All the
series do not need to contain the same number of rows and columns. Row and
column labels are taken from the first series added, unless they are
explicitly defined for the row and column axes.
Axis formatters can be used to customize value axis grid lines and labels.
The QValue3DAxisFormatter class and ValueAxis3DFormatter QML type provide
formatting rules for a linear value 3D axis. The QLogValue3DAxisFormatter
class and the LogValueAxis3DFormatter QML type provide formatting rules for
a logarithmic value 3D axis.
Polar horizontal axes can be used for surface and scatter graphs by setting
the \l{QAbstract3DGraph::}{polar} property.
\section1 3D Themes
A theme is a built-in collection of UI style related settings applied to all
the visual elements of a graph, such as the colors, fonts, and visibility of
the elements, as well as the strenght of the light and ambient light.
Qt Charts comes with the following predefined themes that can be used as
basis for custom themes:
\list
\li \e Qt is a light theme with green as the base color.
\li \e {Primary colors} is a light theme with yellow as the base color.
\li \e Digia is a light theme with gray as the base color.
\li \e {Stone moss} is a medium dark theme with yellow as the base
color.
\li \e {Army blue} is a medium light theme with blue as the base color.
\li \e Retro is a medium light theme with brown as the base color.
\li \e Ebony is a dark theme with white as the base color.
\li \e Isabelle is a dark theme with yellow as the base color.
\li \e {User defined} is the default theme that is meant to be
customized. For more information, see \l {Default Theme}.
\endlist
Custom themes can also be created from scratch.
If a graph displays the data from several data series, some settings can be
specified separately for each series. For example, different gradients can
be specified for different layers of the graph to make it look more
realistic. For an example, see \l{Qt Quick 2 Surface Multiseries Example}.
\section1 Customizing 3D Scenes
A 3D scene is implemented by using the Q3DScene class or the Scene3D QML
type. A scene contains a single active camera, implemented by using the
Q3DCamera class or the Camera3D type, and a single active light source,
implemented by using the Q3DLight class or the Light3D type. The light
source is always positioned in relation to the camera. By default, the light
position follows the camera automatically.
The camera can be customized by specifying its preset position, rotation,
and zoom level. For an example, see \l{Qt Quick 2 Scatter Example}.
\section1 Customizing Items
Qt Data Visualization has predefined mesh types for bars, items, and
surfaces. The mesh type determines how a bar, an item, or a surface looks on
a graph. A user-defined mesh can be specified as a Wavefront OBJ geometry
definition file. For more variety, a quaternion can be set for mesh
rotation.
In addition to customizing individual items, the QCustom3DItem class or the
Custom3DItem QML type can be used to add custom items to graphs. The items
have a custom mesh, position, scaling, rotation, and an optional texture.
The QCustom3DVolume class and the Custom3DVolume QML type can be used to
create volume rendered objects to be added to a graph. A volume rendered
object is a box with a 3D texture. Three slice planes are supported for the
volume, one along each main axis of the volume.
The The QCustom3DLabel class and the Custom3DLabel QML type implement custom
labels with the specified text, font, position, scaling, and rotation. Label
colors, borders, and background are determined by the active theme.
*/
|