|
@@
-1,49
+1,49
|
|
1
|
1
|
/*!
|
|
2
|
2
|
\example demos/nesteddonuts
|
|
3
|
3
|
\title Nested donuts demo
|
|
4
|
4
|
\subtitle
|
|
5
|
5
|
|
|
6
|
6
|
This example shows how to use create a nested donuts chart using QPieSeries API.
|
|
7
|
|
\image examples_donutchart.png
|
|
|
7
|
\image demos_nesteddonuts.png
|
|
8
|
8
|
|
|
9
|
9
|
Let's start by creating a QChartView instance and enabling the Antialiasing on it. Last line enables the animations of the chart.
|
|
10
|
10
|
|
|
11
|
11
|
\snippet ../demos/nesteddonuts/widget.cpp 1
|
|
12
|
12
|
|
|
13
|
13
|
Three variables are defined that will be used to define the donut chart. Min and max size define the relative size of the whole donut.
|
|
14
|
14
|
minSize is the relative inner size of the smallest donut. maxSize is the relative outer size of the biggest donut.
|
|
15
|
15
|
|
|
16
|
16
|
\snippet ../demos/nesteddonuts/widget.cpp 2
|
|
17
|
17
|
|
|
18
|
18
|
Following block of code defines the individual donuts and their slices. First new QPieSeries object is created.
|
|
19
|
19
|
Callign setDonut() changes pie into a donut. The number of slices in each donut is randomized.
|
|
20
|
20
|
The internal for loop creates the slices with a random value and label same as the value.
|
|
21
|
21
|
Next the label of the slice is set to be visible and its color is set to white.
|
|
22
|
22
|
To make the example more interesting the hovered signal of the slice is connected to widget's slot which inner workings are explained later.
|
|
23
|
23
|
Finally the slice is added to the donut. The donut's size is adjusted to achieve the nesting of the donuts.
|
|
24
|
24
|
Then the donut is added to the widget's list of donuts and to the chart.
|
|
25
|
25
|
|
|
26
|
26
|
\snippet ../demos/nesteddonuts/widget.cpp 3
|
|
27
|
27
|
|
|
28
|
28
|
Finally the widget is placed in a layout used by the application.
|
|
29
|
29
|
|
|
30
|
30
|
\snippet ../demos/nesteddonuts/widget.cpp 4
|
|
31
|
31
|
|
|
32
|
32
|
To make the example more interesting the donuts are rotated randomly every 1.25 sec.
|
|
33
|
33
|
|
|
34
|
34
|
\snippet ../demos/nesteddonuts/widget.cpp 5
|
|
35
|
35
|
|
|
36
|
36
|
The widget's updatedRotation slot is defined below.
|
|
37
|
37
|
It goes through all of the donuts and modifies thier current rotation by a random value.
|
|
38
|
38
|
|
|
39
|
39
|
\snippet ../demos/nesteddonuts/widget.cpp 6
|
|
40
|
40
|
|
|
41
|
41
|
The earlier mentioned explodeSlice slot code is provided below.
|
|
42
|
42
|
If the slice is set to exploded then stop the timer that controls the donuts rotation.
|
|
43
|
43
|
Then the slice's start and end agles are obtained from the slice.
|
|
44
|
44
|
To highlight the selected slice all the other donuts that lie outward from the one that contains the selected slice
|
|
45
|
45
|
have their start and end angles modified so that they wouldn't "block" the way for the hightlighted slice.
|
|
46
|
46
|
If the slice is no longer selected return to the original state.
|
|
47
|
47
|
|
|
48
|
48
|
\snippet ../demos/nesteddonuts/widget.cpp 7
|
|
49
|
49
|
*/
|