<?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>mainwidget.cpp Example File | Qt Charts 5.12.6</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="qtcharts-index.html">Qt Charts</a></td><td ><a href="qtcharts-piechartcustomization-example.html">Pie Chart Customization Example</a></td><td >mainwidget.cpp Example File</td></tr></table><table class="buildversion"><tr> <td id="buildversion" width="100%" align="right"><a href="qtcharts-index.html">Qt Charts | 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">mainwidget.cpp Example File</h1> <span class="subtitle">piechartcustomization/mainwidget.cpp</span> <!-- $$$piechartcustomization/mainwidget.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 Charts 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 "mainwidget.h"</span> <span class="preprocessor">#include "customslice.h"</span> <span class="preprocessor">#include "pentool.h"</span> <span class="preprocessor">#include "brushtool.h"</span> <span class="preprocessor">#include <QtWidgets/QPushButton></span> <span class="preprocessor">#include <QtWidgets/QComboBox></span> <span class="preprocessor">#include <QtWidgets/QCheckBox></span> <span class="preprocessor">#include <QtWidgets/QLineEdit></span> <span class="preprocessor">#include <QtWidgets/QGroupBox></span> <span class="preprocessor">#include <QtWidgets/QDoubleSpinBox></span> <span class="preprocessor">#include <QtWidgets/QFormLayout></span> <span class="preprocessor">#include <QtWidgets/QFontDialog></span> <span class="preprocessor">#include <QtCharts/QChartView></span> <span class="preprocessor">#include <QtCharts/QPieSeries></span> QT_CHARTS_USE_NAMESPACE MainWidget<span class="operator">::</span>MainWidget(<span class="type">QWidget</span> <span class="operator">*</span>parent) : <span class="type">QWidget</span>(parent)<span class="operator">,</span> m_slice(<span class="number">0</span>) { <span class="comment">// create chart</span> <span class="type"><a href="qchart.html">QChart</a></span> <span class="operator">*</span>chart <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qchart.html">QChart</a></span>; chart<span class="operator">-</span><span class="operator">></span>setTitle(<span class="string">"Piechart customization"</span>); chart<span class="operator">-</span><span class="operator">></span>setAnimationOptions(<span class="type"><a href="qchart.html">QChart</a></span><span class="operator">::</span>AllAnimations); <span class="comment">// create series</span> m_series <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qpieseries.html">QPieSeries</a></span>(); <span class="operator">*</span>m_series <span class="operator"><</span><span class="operator"><</span> <span class="keyword">new</span> CustomSlice(<span class="string">"Slice 1"</span><span class="operator">,</span> <span class="number">10.0</span>); <span class="operator">*</span>m_series <span class="operator"><</span><span class="operator"><</span> <span class="keyword">new</span> CustomSlice(<span class="string">"Slice 2"</span><span class="operator">,</span> <span class="number">20.0</span>); <span class="operator">*</span>m_series <span class="operator"><</span><span class="operator"><</span> <span class="keyword">new</span> CustomSlice(<span class="string">"Slice 3"</span><span class="operator">,</span> <span class="number">30.0</span>); <span class="operator">*</span>m_series <span class="operator"><</span><span class="operator"><</span> <span class="keyword">new</span> CustomSlice(<span class="string">"Slice 4"</span><span class="operator">,</span> <span class="number">40.0</span>); <span class="operator">*</span>m_series <span class="operator"><</span><span class="operator"><</span> <span class="keyword">new</span> CustomSlice(<span class="string">"Slice 5"</span><span class="operator">,</span> <span class="number">50.0</span>); m_series<span class="operator">-</span><span class="operator">></span>setLabelsVisible(); chart<span class="operator">-</span><span class="operator">></span>addSeries(m_series); connect(m_series<span class="operator">,</span> <span class="operator">&</span><span class="type"><a href="qpieseries.html">QPieSeries</a></span><span class="operator">::</span>clicked<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> <span class="operator">&</span>MainWidget<span class="operator">::</span>handleSliceClicked); <span class="comment">// chart settings</span> m_themeComboBox <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QComboBox</span>(); m_themeComboBox<span class="operator">-</span><span class="operator">></span>addItem(<span class="string">"Light"</span><span class="operator">,</span> <span class="type"><a href="qchart.html">QChart</a></span><span class="operator">::</span>ChartThemeLight); m_themeComboBox<span class="operator">-</span><span class="operator">></span>addItem(<span class="string">"BlueCerulean"</span><span class="operator">,</span> <span class="type"><a href="qchart.html">QChart</a></span><span class="operator">::</span>ChartThemeBlueCerulean); m_themeComboBox<span class="operator">-</span><span class="operator">></span>addItem(<span class="string">"Dark"</span><span class="operator">,</span> <span class="type"><a href="qchart.html">QChart</a></span><span class="operator">::</span>ChartThemeDark); m_themeComboBox<span class="operator">-</span><span class="operator">></span>addItem(<span class="string">"BrownSand"</span><span class="operator">,</span> <span class="type"><a href="qchart.html">QChart</a></span><span class="operator">::</span>ChartThemeBrownSand); m_themeComboBox<span class="operator">-</span><span class="operator">></span>addItem(<span class="string">"BlueNcs"</span><span class="operator">,</span> <span class="type"><a href="qchart.html">QChart</a></span><span class="operator">::</span>ChartThemeBlueNcs); m_themeComboBox<span class="operator">-</span><span class="operator">></span>addItem(<span class="string">"High Contrast"</span><span class="operator">,</span> <span class="type"><a href="qchart.html">QChart</a></span><span class="operator">::</span>ChartThemeHighContrast); m_themeComboBox<span class="operator">-</span><span class="operator">></span>addItem(<span class="string">"Blue Icy"</span><span class="operator">,</span> <span class="type"><a href="qchart.html">QChart</a></span><span class="operator">::</span>ChartThemeBlueIcy); m_themeComboBox<span class="operator">-</span><span class="operator">></span>addItem(<span class="string">"Qt"</span><span class="operator">,</span> <span class="type"><a href="qchart.html">QChart</a></span><span class="operator">::</span>ChartThemeQt); m_aaCheckBox <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QCheckBox</span>(); m_animationsCheckBox <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QCheckBox</span>(); m_animationsCheckBox<span class="operator">-</span><span class="operator">></span>setCheckState(<span class="type">Qt</span><span class="operator">::</span>Checked); m_legendCheckBox <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QCheckBox</span>(); <span class="type">QFormLayout</span> <span class="operator">*</span>chartSettingsLayout <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QFormLayout</span>(); chartSettingsLayout<span class="operator">-</span><span class="operator">></span>addRow(<span class="string">"Theme"</span><span class="operator">,</span> m_themeComboBox); chartSettingsLayout<span class="operator">-</span><span class="operator">></span>addRow(<span class="string">"Antialiasing"</span><span class="operator">,</span> m_aaCheckBox); chartSettingsLayout<span class="operator">-</span><span class="operator">></span>addRow(<span class="string">"Animations"</span><span class="operator">,</span> m_animationsCheckBox); chartSettingsLayout<span class="operator">-</span><span class="operator">></span>addRow(<span class="string">"Legend"</span><span class="operator">,</span> m_legendCheckBox); <span class="type">QGroupBox</span> <span class="operator">*</span>chartSettings <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QGroupBox</span>(<span class="string">"Chart"</span>); chartSettings<span class="operator">-</span><span class="operator">></span>setLayout(chartSettingsLayout); connect(m_themeComboBox<span class="operator">,</span> <span class="keyword">static_cast</span><span class="operator"><</span><span class="type">void</span> (<span class="type">QComboBox</span><span class="operator">::</span><span class="operator">*</span>)(<span class="type">int</span>)<span class="operator">></span>(<span class="operator">&</span><span class="type">QComboBox</span><span class="operator">::</span>currentIndexChanged)<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> <span class="operator">&</span>MainWidget<span class="operator">::</span>updateChartSettings); connect(m_aaCheckBox<span class="operator">,</span> <span class="operator">&</span><span class="type">QCheckBox</span><span class="operator">::</span>toggled<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> <span class="operator">&</span>MainWidget<span class="operator">::</span>updateChartSettings); connect(m_animationsCheckBox<span class="operator">,</span> <span class="operator">&</span><span class="type">QCheckBox</span><span class="operator">::</span>toggled<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> <span class="operator">&</span>MainWidget<span class="operator">::</span>updateChartSettings); connect(m_legendCheckBox<span class="operator">,</span> <span class="operator">&</span><span class="type">QCheckBox</span><span class="operator">::</span>toggled<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> <span class="operator">&</span>MainWidget<span class="operator">::</span>updateChartSettings); <span class="comment">// series settings</span> m_hPosition <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QDoubleSpinBox</span>(); m_hPosition<span class="operator">-</span><span class="operator">></span>setMinimum(<span class="number">0.0</span>); m_hPosition<span class="operator">-</span><span class="operator">></span>setMaximum(<span class="number">1.0</span>); m_hPosition<span class="operator">-</span><span class="operator">></span>setSingleStep(<span class="number">0.1</span>); m_hPosition<span class="operator">-</span><span class="operator">></span>setValue(m_series<span class="operator">-</span><span class="operator">></span>horizontalPosition()); m_vPosition <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QDoubleSpinBox</span>(); m_vPosition<span class="operator">-</span><span class="operator">></span>setMinimum(<span class="number">0.0</span>); m_vPosition<span class="operator">-</span><span class="operator">></span>setMaximum(<span class="number">1.0</span>); m_vPosition<span class="operator">-</span><span class="operator">></span>setSingleStep(<span class="number">0.1</span>); m_vPosition<span class="operator">-</span><span class="operator">></span>setValue(m_series<span class="operator">-</span><span class="operator">></span>verticalPosition()); m_sizeFactor <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QDoubleSpinBox</span>(); m_sizeFactor<span class="operator">-</span><span class="operator">></span>setMinimum(<span class="number">0.0</span>); m_sizeFactor<span class="operator">-</span><span class="operator">></span>setMaximum(<span class="number">1.0</span>); m_sizeFactor<span class="operator">-</span><span class="operator">></span>setSingleStep(<span class="number">0.1</span>); m_sizeFactor<span class="operator">-</span><span class="operator">></span>setValue(m_series<span class="operator">-</span><span class="operator">></span>pieSize()); m_startAngle <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QDoubleSpinBox</span>(); m_startAngle<span class="operator">-</span><span class="operator">></span>setMinimum(<span class="operator">-</span><span class="number">720</span>); m_startAngle<span class="operator">-</span><span class="operator">></span>setMaximum(<span class="number">720</span>); m_startAngle<span class="operator">-</span><span class="operator">></span>setValue(m_series<span class="operator">-</span><span class="operator">></span>pieStartAngle()); m_startAngle<span class="operator">-</span><span class="operator">></span>setSingleStep(<span class="number">1</span>); m_endAngle <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QDoubleSpinBox</span>(); m_endAngle<span class="operator">-</span><span class="operator">></span>setMinimum(<span class="operator">-</span><span class="number">720</span>); m_endAngle<span class="operator">-</span><span class="operator">></span>setMaximum(<span class="number">720</span>); m_endAngle<span class="operator">-</span><span class="operator">></span>setValue(m_series<span class="operator">-</span><span class="operator">></span>pieEndAngle()); m_endAngle<span class="operator">-</span><span class="operator">></span>setSingleStep(<span class="number">1</span>); m_holeSize <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QDoubleSpinBox</span>(); m_holeSize<span class="operator">-</span><span class="operator">></span>setMinimum(<span class="number">0.0</span>); m_holeSize<span class="operator">-</span><span class="operator">></span>setMaximum(<span class="number">1.0</span>); m_holeSize<span class="operator">-</span><span class="operator">></span>setSingleStep(<span class="number">0.1</span>); m_holeSize<span class="operator">-</span><span class="operator">></span>setValue(m_series<span class="operator">-</span><span class="operator">></span>holeSize()); <span class="type">QPushButton</span> <span class="operator">*</span>appendSlice <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QPushButton</span>(<span class="string">"Append slice"</span>); <span class="type">QPushButton</span> <span class="operator">*</span>insertSlice <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QPushButton</span>(<span class="string">"Insert slice"</span>); <span class="type">QPushButton</span> <span class="operator">*</span>removeSlice <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QPushButton</span>(<span class="string">"Remove selected slice"</span>); <span class="type">QFormLayout</span> <span class="operator">*</span>seriesSettingsLayout <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QFormLayout</span>(); seriesSettingsLayout<span class="operator">-</span><span class="operator">></span>addRow(<span class="string">"Horizontal position"</span><span class="operator">,</span> m_hPosition); seriesSettingsLayout<span class="operator">-</span><span class="operator">></span>addRow(<span class="string">"Vertical position"</span><span class="operator">,</span> m_vPosition); seriesSettingsLayout<span class="operator">-</span><span class="operator">></span>addRow(<span class="string">"Size factor"</span><span class="operator">,</span> m_sizeFactor); seriesSettingsLayout<span class="operator">-</span><span class="operator">></span>addRow(<span class="string">"Start angle"</span><span class="operator">,</span> m_startAngle); seriesSettingsLayout<span class="operator">-</span><span class="operator">></span>addRow(<span class="string">"End angle"</span><span class="operator">,</span> m_endAngle); seriesSettingsLayout<span class="operator">-</span><span class="operator">></span>addRow(<span class="string">"Hole size"</span><span class="operator">,</span> m_holeSize); seriesSettingsLayout<span class="operator">-</span><span class="operator">></span>addRow(appendSlice); seriesSettingsLayout<span class="operator">-</span><span class="operator">></span>addRow(insertSlice); seriesSettingsLayout<span class="operator">-</span><span class="operator">></span>addRow(removeSlice); <span class="type">QGroupBox</span> <span class="operator">*</span>seriesSettings <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QGroupBox</span>(<span class="string">"Series"</span>); seriesSettings<span class="operator">-</span><span class="operator">></span>setLayout(seriesSettingsLayout); connect(m_vPosition<span class="operator">,</span> <span class="keyword">static_cast</span><span class="operator"><</span><span class="type">void</span> (<span class="type">QDoubleSpinBox</span><span class="operator">::</span><span class="operator">*</span>)(<span class="type">double</span>)<span class="operator">></span>(<span class="operator">&</span><span class="type">QDoubleSpinBox</span><span class="operator">::</span>valueChanged)<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> <span class="operator">&</span>MainWidget<span class="operator">::</span>updateSerieSettings); connect(m_hPosition<span class="operator">,</span> <span class="keyword">static_cast</span><span class="operator"><</span><span class="type">void</span> (<span class="type">QDoubleSpinBox</span><span class="operator">::</span><span class="operator">*</span>)(<span class="type">double</span>)<span class="operator">></span>(<span class="operator">&</span><span class="type">QDoubleSpinBox</span><span class="operator">::</span>valueChanged)<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> <span class="operator">&</span>MainWidget<span class="operator">::</span>updateSerieSettings); connect(m_sizeFactor<span class="operator">,</span> <span class="keyword">static_cast</span><span class="operator"><</span><span class="type">void</span> (<span class="type">QDoubleSpinBox</span><span class="operator">::</span><span class="operator">*</span>)(<span class="type">double</span>)<span class="operator">></span>(<span class="operator">&</span><span class="type">QDoubleSpinBox</span><span class="operator">::</span>valueChanged)<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> <span class="operator">&</span>MainWidget<span class="operator">::</span>updateSerieSettings); connect(m_startAngle<span class="operator">,</span> <span class="keyword">static_cast</span><span class="operator"><</span><span class="type">void</span> (<span class="type">QDoubleSpinBox</span><span class="operator">::</span><span class="operator">*</span>)(<span class="type">double</span>)<span class="operator">></span>(<span class="operator">&</span><span class="type">QDoubleSpinBox</span><span class="operator">::</span>valueChanged)<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> <span class="operator">&</span>MainWidget<span class="operator">::</span>updateSerieSettings); connect(m_endAngle<span class="operator">,</span> <span class="keyword">static_cast</span><span class="operator"><</span><span class="type">void</span> (<span class="type">QDoubleSpinBox</span><span class="operator">::</span><span class="operator">*</span>)(<span class="type">double</span>)<span class="operator">></span>(<span class="operator">&</span><span class="type">QDoubleSpinBox</span><span class="operator">::</span>valueChanged)<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> <span class="operator">&</span>MainWidget<span class="operator">::</span>updateSerieSettings); connect(m_holeSize<span class="operator">,</span> <span class="keyword">static_cast</span><span class="operator"><</span><span class="type">void</span> (<span class="type">QDoubleSpinBox</span><span class="operator">::</span><span class="operator">*</span>)(<span class="type">double</span>)<span class="operator">></span>(<span class="operator">&</span><span class="type">QDoubleSpinBox</span><span class="operator">::</span>valueChanged)<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> <span class="operator">&</span>MainWidget<span class="operator">::</span>updateSerieSettings); connect(appendSlice<span class="operator">,</span> <span class="operator">&</span><span class="type">QPushButton</span><span class="operator">::</span>clicked<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> <span class="operator">&</span>MainWidget<span class="operator">::</span>appendSlice); connect(insertSlice<span class="operator">,</span> <span class="operator">&</span><span class="type">QPushButton</span><span class="operator">::</span>clicked<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> <span class="operator">&</span>MainWidget<span class="operator">::</span>insertSlice); connect(removeSlice<span class="operator">,</span> <span class="operator">&</span><span class="type">QPushButton</span><span class="operator">::</span>clicked<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> <span class="operator">&</span>MainWidget<span class="operator">::</span>removeSlice); <span class="comment">// slice settings</span> m_sliceName <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QLineEdit</span>(<span class="string">"<click a slice>"</span>); m_sliceName<span class="operator">-</span><span class="operator">></span>setSizePolicy(<span class="type">QSizePolicy</span><span class="operator">::</span>Maximum<span class="operator">,</span> <span class="type">QSizePolicy</span><span class="operator">::</span>Maximum); m_sliceValue <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QDoubleSpinBox</span>(); m_sliceValue<span class="operator">-</span><span class="operator">></span>setMaximum(<span class="number">1000</span>); m_sliceLabelVisible <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QCheckBox</span>(); m_sliceLabelArmFactor <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QDoubleSpinBox</span>(); m_sliceLabelArmFactor<span class="operator">-</span><span class="operator">></span>setSingleStep(<span class="number">0.01</span>); m_sliceExploded <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QCheckBox</span>(); m_sliceExplodedFactor <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QDoubleSpinBox</span>(); m_sliceExplodedFactor<span class="operator">-</span><span class="operator">></span>setSingleStep(<span class="number">0.01</span>); m_pen <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QPushButton</span>(); m_penTool <span class="operator">=</span> <span class="keyword">new</span> PenTool(<span class="string">"Slice pen"</span><span class="operator">,</span> <span class="keyword">this</span>); m_brush <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QPushButton</span>(); m_brushTool <span class="operator">=</span> <span class="keyword">new</span> BrushTool(<span class="string">"Slice brush"</span><span class="operator">,</span> <span class="keyword">this</span>); m_font <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QPushButton</span>(); m_labelBrush <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QPushButton</span>(); m_labelBrushTool <span class="operator">=</span> <span class="keyword">new</span> BrushTool(<span class="string">"Label brush"</span><span class="operator">,</span> <span class="keyword">this</span>); m_labelPosition <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QComboBox</span>(<span class="keyword">this</span>); m_labelPosition<span class="operator">-</span><span class="operator">></span>addItem(<span class="string">"Outside"</span><span class="operator">,</span> <span class="type"><a href="qpieslice.html">QPieSlice</a></span><span class="operator">::</span>LabelOutside); m_labelPosition<span class="operator">-</span><span class="operator">></span>addItem(<span class="string">"Inside horizontal"</span><span class="operator">,</span> <span class="type"><a href="qpieslice.html">QPieSlice</a></span><span class="operator">::</span>LabelInsideHorizontal); m_labelPosition<span class="operator">-</span><span class="operator">></span>addItem(<span class="string">"Inside tangential"</span><span class="operator">,</span> <span class="type"><a href="qpieslice.html">QPieSlice</a></span><span class="operator">::</span>LabelInsideTangential); m_labelPosition<span class="operator">-</span><span class="operator">></span>addItem(<span class="string">"Inside normal"</span><span class="operator">,</span> <span class="type"><a href="qpieslice.html">QPieSlice</a></span><span class="operator">::</span>LabelInsideNormal); <span class="type">QFormLayout</span> <span class="operator">*</span>sliceSettingsLayout <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QFormLayout</span>(); sliceSettingsLayout<span class="operator">-</span><span class="operator">></span>addRow(<span class="string">"Label"</span><span class="operator">,</span> m_sliceName); sliceSettingsLayout<span class="operator">-</span><span class="operator">></span>addRow(<span class="string">"Value"</span><span class="operator">,</span> m_sliceValue); sliceSettingsLayout<span class="operator">-</span><span class="operator">></span>addRow(<span class="string">"Pen"</span><span class="operator">,</span> m_pen); sliceSettingsLayout<span class="operator">-</span><span class="operator">></span>addRow(<span class="string">"Brush"</span><span class="operator">,</span> m_brush); sliceSettingsLayout<span class="operator">-</span><span class="operator">></span>addRow(<span class="string">"Label visible"</span><span class="operator">,</span> m_sliceLabelVisible); sliceSettingsLayout<span class="operator">-</span><span class="operator">></span>addRow(<span class="string">"Label font"</span><span class="operator">,</span> m_font); sliceSettingsLayout<span class="operator">-</span><span class="operator">></span>addRow(<span class="string">"Label brush"</span><span class="operator">,</span> m_labelBrush); sliceSettingsLayout<span class="operator">-</span><span class="operator">></span>addRow(<span class="string">"Label position"</span><span class="operator">,</span> m_labelPosition); sliceSettingsLayout<span class="operator">-</span><span class="operator">></span>addRow(<span class="string">"Label arm length"</span><span class="operator">,</span> m_sliceLabelArmFactor); sliceSettingsLayout<span class="operator">-</span><span class="operator">></span>addRow(<span class="string">"Exploded"</span><span class="operator">,</span> m_sliceExploded); sliceSettingsLayout<span class="operator">-</span><span class="operator">></span>addRow(<span class="string">"Explode distance"</span><span class="operator">,</span> m_sliceExplodedFactor); <span class="type">QGroupBox</span> <span class="operator">*</span>sliceSettings <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QGroupBox</span>(<span class="string">"Selected slice"</span>); sliceSettings<span class="operator">-</span><span class="operator">></span>setLayout(sliceSettingsLayout); connect(m_sliceName<span class="operator">,</span> <span class="operator">&</span><span class="type">QLineEdit</span><span class="operator">::</span>textChanged<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> <span class="operator">&</span>MainWidget<span class="operator">::</span>updateSliceSettings); connect(m_sliceValue<span class="operator">,</span> <span class="keyword">static_cast</span><span class="operator"><</span><span class="type">void</span> (<span class="type">QDoubleSpinBox</span><span class="operator">::</span><span class="operator">*</span>)(<span class="type">double</span>)<span class="operator">></span>(<span class="operator">&</span><span class="type">QDoubleSpinBox</span><span class="operator">::</span>valueChanged)<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> <span class="operator">&</span>MainWidget<span class="operator">::</span>updateSliceSettings); connect(m_pen<span class="operator">,</span> <span class="operator">&</span><span class="type">QPushButton</span><span class="operator">::</span>clicked<span class="operator">,</span> m_penTool<span class="operator">,</span> <span class="operator">&</span>PenTool<span class="operator">::</span>show); connect(m_penTool<span class="operator">,</span> <span class="operator">&</span>PenTool<span class="operator">::</span>changed<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> <span class="operator">&</span>MainWidget<span class="operator">::</span>updateSliceSettings); connect(m_brush<span class="operator">,</span> <span class="operator">&</span><span class="type">QPushButton</span><span class="operator">::</span>clicked<span class="operator">,</span> m_brushTool<span class="operator">,</span> <span class="operator">&</span>BrushTool<span class="operator">::</span>show); connect(m_brushTool<span class="operator">,</span> <span class="operator">&</span>BrushTool<span class="operator">::</span>changed<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> <span class="operator">&</span>MainWidget<span class="operator">::</span>updateSliceSettings); connect(m_font<span class="operator">,</span> <span class="operator">&</span><span class="type">QPushButton</span><span class="operator">::</span>clicked<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> <span class="operator">&</span>MainWidget<span class="operator">::</span>showFontDialog); connect(m_labelBrush<span class="operator">,</span> <span class="operator">&</span><span class="type">QPushButton</span><span class="operator">::</span>clicked<span class="operator">,</span> m_labelBrushTool<span class="operator">,</span> <span class="operator">&</span>BrushTool<span class="operator">::</span>show); connect(m_labelBrushTool<span class="operator">,</span> <span class="operator">&</span>BrushTool<span class="operator">::</span>changed<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> <span class="operator">&</span>MainWidget<span class="operator">::</span>updateSliceSettings); connect(m_sliceLabelVisible<span class="operator">,</span> <span class="operator">&</span><span class="type">QCheckBox</span><span class="operator">::</span>toggled<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> <span class="operator">&</span>MainWidget<span class="operator">::</span>updateSliceSettings); connect(m_sliceLabelVisible<span class="operator">,</span> <span class="operator">&</span><span class="type">QCheckBox</span><span class="operator">::</span>toggled<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> <span class="operator">&</span>MainWidget<span class="operator">::</span>updateSliceSettings); connect(m_sliceLabelArmFactor<span class="operator">,</span> <span class="keyword">static_cast</span><span class="operator"><</span><span class="type">void</span> (<span class="type">QDoubleSpinBox</span><span class="operator">::</span><span class="operator">*</span>)(<span class="type">double</span>)<span class="operator">></span>(<span class="operator">&</span><span class="type">QDoubleSpinBox</span><span class="operator">::</span>valueChanged)<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> <span class="operator">&</span>MainWidget<span class="operator">::</span>updateSliceSettings); connect(m_sliceExploded<span class="operator">,</span> <span class="operator">&</span><span class="type">QCheckBox</span><span class="operator">::</span>toggled<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> <span class="operator">&</span>MainWidget<span class="operator">::</span>updateSliceSettings); connect(m_sliceExplodedFactor<span class="operator">,</span> <span class="keyword">static_cast</span><span class="operator"><</span><span class="type">void</span> (<span class="type">QDoubleSpinBox</span><span class="operator">::</span><span class="operator">*</span>)(<span class="type">double</span>)<span class="operator">></span>(<span class="operator">&</span><span class="type">QDoubleSpinBox</span><span class="operator">::</span>valueChanged)<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> <span class="operator">&</span>MainWidget<span class="operator">::</span>updateSliceSettings); connect(m_labelPosition<span class="operator">,</span> <span class="keyword">static_cast</span><span class="operator"><</span><span class="type">void</span> (<span class="type">QComboBox</span><span class="operator">::</span><span class="operator">*</span>)(<span class="type">int</span>)<span class="operator">></span>(<span class="operator">&</span><span class="type">QComboBox</span><span class="operator">::</span>currentIndexChanged)<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> <span class="operator">&</span>MainWidget<span class="operator">::</span>updateSliceSettings); <span class="comment">// create chart view</span> m_chartView <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qchartview.html">QChartView</a></span>(chart); <span class="comment">// create main layout</span> <span class="type">QVBoxLayout</span> <span class="operator">*</span>settingsLayout <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QVBoxLayout</span>(); settingsLayout<span class="operator">-</span><span class="operator">></span>addWidget(chartSettings); settingsLayout<span class="operator">-</span><span class="operator">></span>addWidget(seriesSettings); settingsLayout<span class="operator">-</span><span class="operator">></span>addWidget(sliceSettings); settingsLayout<span class="operator">-</span><span class="operator">></span>addStretch(); <span class="type">QGridLayout</span> <span class="operator">*</span>baseLayout <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QGridLayout</span>(); baseLayout<span class="operator">-</span><span class="operator">></span>addLayout(settingsLayout<span class="operator">,</span> <span class="number">0</span><span class="operator">,</span> <span class="number">0</span>); baseLayout<span class="operator">-</span><span class="operator">></span>addWidget(m_chartView<span class="operator">,</span> <span class="number">0</span><span class="operator">,</span> <span class="number">1</span>); setLayout(baseLayout); updateSerieSettings(); updateChartSettings(); } <span class="type">void</span> MainWidget<span class="operator">::</span>updateChartSettings() { <span class="type"><a href="qchart.html">QChart</a></span><span class="operator">::</span>ChartTheme theme <span class="operator">=</span> <span class="keyword">static_cast</span><span class="operator"><</span><span class="type"><a href="qchart.html">QChart</a></span><span class="operator">::</span>ChartTheme<span class="operator">></span>(m_themeComboBox<span class="operator">-</span><span class="operator">></span>itemData( m_themeComboBox<span class="operator">-</span><span class="operator">></span>currentIndex())<span class="operator">.</span>toInt()); m_chartView<span class="operator">-</span><span class="operator">></span>chart()<span class="operator">-</span><span class="operator">></span>setTheme(theme); m_chartView<span class="operator">-</span><span class="operator">></span>setRenderHint(<span class="type">QPainter</span><span class="operator">::</span>Antialiasing<span class="operator">,</span> m_aaCheckBox<span class="operator">-</span><span class="operator">></span>isChecked()); <span class="keyword">if</span> (m_animationsCheckBox<span class="operator">-</span><span class="operator">></span>checkState() <span class="operator">=</span><span class="operator">=</span> <span class="type">Qt</span><span class="operator">::</span>Checked) m_chartView<span class="operator">-</span><span class="operator">></span>chart()<span class="operator">-</span><span class="operator">></span>setAnimationOptions(<span class="type"><a href="qchart.html">QChart</a></span><span class="operator">::</span>AllAnimations); <span class="keyword">else</span> m_chartView<span class="operator">-</span><span class="operator">></span>chart()<span class="operator">-</span><span class="operator">></span>setAnimationOptions(<span class="type"><a href="qchart.html">QChart</a></span><span class="operator">::</span>NoAnimation); <span class="keyword">if</span> (m_legendCheckBox<span class="operator">-</span><span class="operator">></span>checkState() <span class="operator">=</span><span class="operator">=</span> <span class="type">Qt</span><span class="operator">::</span>Checked) m_chartView<span class="operator">-</span><span class="operator">></span>chart()<span class="operator">-</span><span class="operator">></span>legend()<span class="operator">-</span><span class="operator">></span>show(); <span class="keyword">else</span> m_chartView<span class="operator">-</span><span class="operator">></span>chart()<span class="operator">-</span><span class="operator">></span>legend()<span class="operator">-</span><span class="operator">></span>hide(); } <span class="type">void</span> MainWidget<span class="operator">::</span>updateSerieSettings() { m_series<span class="operator">-</span><span class="operator">></span>setHorizontalPosition(m_hPosition<span class="operator">-</span><span class="operator">></span>value()); m_series<span class="operator">-</span><span class="operator">></span>setVerticalPosition(m_vPosition<span class="operator">-</span><span class="operator">></span>value()); m_series<span class="operator">-</span><span class="operator">></span>setPieSize(m_sizeFactor<span class="operator">-</span><span class="operator">></span>value()); m_holeSize<span class="operator">-</span><span class="operator">></span>setMaximum(m_sizeFactor<span class="operator">-</span><span class="operator">></span>value()); m_series<span class="operator">-</span><span class="operator">></span>setPieStartAngle(m_startAngle<span class="operator">-</span><span class="operator">></span>value()); m_series<span class="operator">-</span><span class="operator">></span>setPieEndAngle(m_endAngle<span class="operator">-</span><span class="operator">></span>value()); m_series<span class="operator">-</span><span class="operator">></span>setHoleSize(m_holeSize<span class="operator">-</span><span class="operator">></span>value()); } <span class="type">void</span> MainWidget<span class="operator">::</span>updateSliceSettings() { <span class="keyword">if</span> (<span class="operator">!</span>m_slice) <span class="keyword">return</span>; m_slice<span class="operator">-</span><span class="operator">></span>setLabel(m_sliceName<span class="operator">-</span><span class="operator">></span>text()); m_slice<span class="operator">-</span><span class="operator">></span>setValue(m_sliceValue<span class="operator">-</span><span class="operator">></span>value()); m_slice<span class="operator">-</span><span class="operator">></span>setPen(m_penTool<span class="operator">-</span><span class="operator">></span>pen()); m_slice<span class="operator">-</span><span class="operator">></span>setBrush(m_brushTool<span class="operator">-</span><span class="operator">></span>brush()); m_slice<span class="operator">-</span><span class="operator">></span>setLabelBrush(m_labelBrushTool<span class="operator">-</span><span class="operator">></span>brush()); m_slice<span class="operator">-</span><span class="operator">></span>setLabelVisible(m_sliceLabelVisible<span class="operator">-</span><span class="operator">></span>isChecked()); m_slice<span class="operator">-</span><span class="operator">></span>setLabelArmLengthFactor(m_sliceLabelArmFactor<span class="operator">-</span><span class="operator">></span>value()); <span class="comment">// We assume that label position index is in sync with the enum</span> m_slice<span class="operator">-</span><span class="operator">></span>setLabelPosition((<span class="type"><a href="qpieslice.html">QPieSlice</a></span><span class="operator">::</span>LabelPosition)m_labelPosition<span class="operator">-</span><span class="operator">></span>currentIndex()); m_slice<span class="operator">-</span><span class="operator">></span>setExploded(m_sliceExploded<span class="operator">-</span><span class="operator">></span>isChecked()); m_slice<span class="operator">-</span><span class="operator">></span>setExplodeDistanceFactor(m_sliceExplodedFactor<span class="operator">-</span><span class="operator">></span>value()); } <span class="type">void</span> MainWidget<span class="operator">::</span>handleSliceClicked(<span class="type"><a href="qpieslice.html">QPieSlice</a></span> <span class="operator">*</span>slice) { m_slice <span class="operator">=</span> <span class="keyword">static_cast</span><span class="operator"><</span>CustomSlice <span class="operator">*</span><span class="operator">></span>(slice); <span class="comment">// name</span> m_sliceName<span class="operator">-</span><span class="operator">></span>blockSignals(<span class="keyword">true</span>); m_sliceName<span class="operator">-</span><span class="operator">></span>setText(slice<span class="operator">-</span><span class="operator">></span>label()); m_sliceName<span class="operator">-</span><span class="operator">></span>blockSignals(<span class="keyword">false</span>); <span class="comment">// value</span> m_sliceValue<span class="operator">-</span><span class="operator">></span>blockSignals(<span class="keyword">true</span>); m_sliceValue<span class="operator">-</span><span class="operator">></span>setValue(slice<span class="operator">-</span><span class="operator">></span>value()); m_sliceValue<span class="operator">-</span><span class="operator">></span>blockSignals(<span class="keyword">false</span>); <span class="comment">// pen</span> m_pen<span class="operator">-</span><span class="operator">></span>setText(PenTool<span class="operator">::</span>name(m_slice<span class="operator">-</span><span class="operator">></span>pen())); m_penTool<span class="operator">-</span><span class="operator">></span>setPen(m_slice<span class="operator">-</span><span class="operator">></span>pen()); <span class="comment">// brush</span> m_brush<span class="operator">-</span><span class="operator">></span>setText(m_slice<span class="operator">-</span><span class="operator">></span>originalBrush()<span class="operator">.</span>color()<span class="operator">.</span>name()); m_brushTool<span class="operator">-</span><span class="operator">></span>setBrush(m_slice<span class="operator">-</span><span class="operator">></span>originalBrush()); <span class="comment">// label</span> m_labelBrush<span class="operator">-</span><span class="operator">></span>setText(BrushTool<span class="operator">::</span>name(m_slice<span class="operator">-</span><span class="operator">></span>labelBrush())); m_labelBrushTool<span class="operator">-</span><span class="operator">></span>setBrush(m_slice<span class="operator">-</span><span class="operator">></span>labelBrush()); m_font<span class="operator">-</span><span class="operator">></span>setText(slice<span class="operator">-</span><span class="operator">></span>labelFont()<span class="operator">.</span>toString()); m_sliceLabelVisible<span class="operator">-</span><span class="operator">></span>blockSignals(<span class="keyword">true</span>); m_sliceLabelVisible<span class="operator">-</span><span class="operator">></span>setChecked(slice<span class="operator">-</span><span class="operator">></span>isLabelVisible()); m_sliceLabelVisible<span class="operator">-</span><span class="operator">></span>blockSignals(<span class="keyword">false</span>); m_sliceLabelArmFactor<span class="operator">-</span><span class="operator">></span>blockSignals(<span class="keyword">true</span>); m_sliceLabelArmFactor<span class="operator">-</span><span class="operator">></span>setValue(slice<span class="operator">-</span><span class="operator">></span>labelArmLengthFactor()); m_sliceLabelArmFactor<span class="operator">-</span><span class="operator">></span>blockSignals(<span class="keyword">false</span>); m_labelPosition<span class="operator">-</span><span class="operator">></span>blockSignals(<span class="keyword">true</span>); <span class="comment">// We assume that label position index is in sync with the enum</span> m_labelPosition<span class="operator">-</span><span class="operator">></span>setCurrentIndex(slice<span class="operator">-</span><span class="operator">></span>labelPosition()); m_labelPosition<span class="operator">-</span><span class="operator">></span>blockSignals(<span class="keyword">false</span>); <span class="comment">// exploded</span> m_sliceExploded<span class="operator">-</span><span class="operator">></span>blockSignals(<span class="keyword">true</span>); m_sliceExploded<span class="operator">-</span><span class="operator">></span>setChecked(slice<span class="operator">-</span><span class="operator">></span>isExploded()); m_sliceExploded<span class="operator">-</span><span class="operator">></span>blockSignals(<span class="keyword">false</span>); m_sliceExplodedFactor<span class="operator">-</span><span class="operator">></span>blockSignals(<span class="keyword">true</span>); m_sliceExplodedFactor<span class="operator">-</span><span class="operator">></span>setValue(slice<span class="operator">-</span><span class="operator">></span>explodeDistanceFactor()); m_sliceExplodedFactor<span class="operator">-</span><span class="operator">></span>blockSignals(<span class="keyword">false</span>); } <span class="type">void</span> MainWidget<span class="operator">::</span>showFontDialog() { <span class="keyword">if</span> (<span class="operator">!</span>m_slice) <span class="keyword">return</span>; <span class="type">QFontDialog</span> dialog(m_slice<span class="operator">-</span><span class="operator">></span>labelFont()); dialog<span class="operator">.</span>show(); dialog<span class="operator">.</span>exec(); m_slice<span class="operator">-</span><span class="operator">></span>setLabelFont(dialog<span class="operator">.</span>currentFont()); m_font<span class="operator">-</span><span class="operator">></span>setText(dialog<span class="operator">.</span>currentFont()<span class="operator">.</span>toString()); } <span class="type">void</span> MainWidget<span class="operator">::</span>appendSlice() { <span class="operator">*</span>m_series <span class="operator"><</span><span class="operator"><</span> <span class="keyword">new</span> CustomSlice(<span class="string">"Slice "</span> <span class="operator">+</span> <span class="type">QString</span><span class="operator">::</span>number(m_series<span class="operator">-</span><span class="operator">></span>count() <span class="operator">+</span> <span class="number">1</span>)<span class="operator">,</span> <span class="number">10.0</span>); } <span class="type">void</span> MainWidget<span class="operator">::</span>insertSlice() { <span class="keyword">if</span> (<span class="operator">!</span>m_slice) <span class="keyword">return</span>; <span class="type">int</span> i <span class="operator">=</span> m_series<span class="operator">-</span><span class="operator">></span>slices()<span class="operator">.</span>indexOf(m_slice); m_series<span class="operator">-</span><span class="operator">></span>insert(i<span class="operator">,</span> <span class="keyword">new</span> CustomSlice(<span class="string">"Slice "</span> <span class="operator">+</span> <span class="type">QString</span><span class="operator">::</span>number(m_series<span class="operator">-</span><span class="operator">></span>count() <span class="operator">+</span> <span class="number">1</span>)<span class="operator">,</span> <span class="number">10.0</span>)); } <span class="type">void</span> MainWidget<span class="operator">::</span>removeSlice() { <span class="keyword">if</span> (<span class="operator">!</span>m_slice) <span class="keyword">return</span>; m_sliceName<span class="operator">-</span><span class="operator">></span>setText(<span class="string">"<click a slice>"</span>); m_series<span class="operator">-</span><span class="operator">></span>remove(m_slice); m_slice <span class="operator">=</span> <span class="number">0</span>; } <span class="preprocessor">#include "moc_mainwidget.cpp"</span> </pre> </div> <!-- @@@piechartcustomization/mainwidget.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>