Revision control
++ // Copyright (C) 2016 The Qt Company Ltd.
++ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
++
++ /*!
++ \page qtcharts-boxplotchart-example.html
++ \title Creating Box-and-Whiskers Charts
++ \brief Shows how to create a box-and-whiskers chart.
++ \include gallery.qdocinc
++
++ The example also shows how to read the non-continuous data from a file,
++ arrange it and find medians needed for box-and-whiskers plotting.
++
++ \image examples_boxplotchart.png {Screenshot showing box and whisker plots in a chart}
++
++ To show the share deviation of two companies we start by creating two QBoxPlotSeries to handle monthly data.
++
++ \snippet chartsgallery/boxplotwidget.cpp 1
++
++ QFile class is used to open a text file where the non-continuous data is kept. The BoxDataReader is an auxiliary class for
++ reading the text file and finding the extreme and median values from the data. The BoxDataReader is explained in more detail later.
++ The method readBox reads the values and sets them to the QBoxSet item which the method returns for the caller. The returned QBoxSet
++ item is added to the series.
++
++ \snippet chartsgallery/boxplotwidget.cpp 2
++
++ In this section a second file is opened for reading the data for the second company.
++
++ \snippet chartsgallery/boxplotwidget.cpp 3
++
++ In this code snippet a new QChart instance is created and previously created series are added to it. The title is also defined and
++ animation is set to be SeriesAnimation.
++
++ \snippet chartsgallery/boxplotwidget.cpp 4
++
++ Here we ask the chart to create default axes for our presentation. We also set the range for the vertical axis by querying the pointer
++ for the axis from the chart, and then setting the min and max for that axis.
++
++ \snippet chartsgallery/boxplotwidget.cpp 5
++
++ In this section we set the legends to be visible and place them at the bottom of the chart.
++
++ \snippet chartsgallery/boxplotwidget.cpp 6
++
++ Finally, we add the chart onto a view. We also turn on the antialiasing for the chartView.
++
++ \snippet chartsgallery/boxplotwidget.cpp 7
++
++ The chart is ready to be shown.
++
++ Here the method readBox is explained in detail.
++
++ First, a line is read from the file and lines starting with # are rejected
++ since they are considered as comment lines.
++
++ \snippet chartsgallery/boxplotdatareader.cpp 1
++
++ In this file the data is arranged as number, space, number, or space. On this snippet the line is split into single number strings which
++ are stored on QStringList.
++
++ \snippet chartsgallery/boxplotdatareader.cpp 2
++
++ The sortedList will hold the numbers in continuous order and in this code segment we show how to do it. First the sortedList is cleared and numbers
++ are read from the strList and stored into sortedList in double format. The qSort method arranges the sortedList into continuous order
++ starting from the smallest.
++
++ \snippet chartsgallery/boxplotdatareader.cpp 3
++
++ Below you will find a code sample showing how to select extremes and medians from the continuous data. Firstly a new QBoxSet is created.
++ Lower and upper extremes are simple to select; they are just first and last items on the sortedList. For medians we use a helper
++ method findMedian which is explained later. For the median from the upper half we need to adjust the begin number if the
++ amount of the numbers is even or uneven. The end number for lower half comes naturally from int rounding.
++
++ \snippet chartsgallery/boxplotdatareader.cpp 4
++
++ Below you will find the code sample for the method findMedian. If the amount of numbers is uneven we select the number from
++ the middle. For even amount numbers we take two numbers from the middle and calculate the mean value.
++
++ \snippet chartsgallery/boxplotdatareader.cpp 5
++ */