Pie Chart Customization Example▲
Sélectionnez
/**
**************************************************************************
**
** 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$
**
***************************************************************************
*/
#include
"pentool.h"
#include <QtWidgets/QPushButton>
#include <QtWidgets/QDoubleSpinBox>
#include <QtWidgets/QComboBox>
#include <QtWidgets/QFormLayout>
#include <QtWidgets/QColorDialog>
PenTool::
PenTool(QString title, QWidget *
parent)
:
QWidget(parent)
{
setWindowTitle(title);
setWindowFlags(Qt::
Tool);
m_colorButton =
new
QPushButton();
m_widthSpinBox =
new
QDoubleSpinBox();
m_styleCombo =
new
QComboBox();
m_styleCombo-&
gt;addItem("NoPen"
);
m_styleCombo-&
gt;addItem("SolidLine"
);
m_styleCombo-&
gt;addItem("DashLine"
);
m_styleCombo-&
gt;addItem("DotLine"
);
m_styleCombo-&
gt;addItem("DashDotLine"
);
m_styleCombo-&
gt;addItem("DashDotDotLine"
);
m_capStyleCombo =
new
QComboBox();
m_capStyleCombo-&
gt;addItem("FlatCap"
, Qt::
FlatCap);
m_capStyleCombo-&
gt;addItem("SquareCap"
, Qt::
SquareCap);
m_capStyleCombo-&
gt;addItem("RoundCap"
, Qt::
RoundCap);
m_joinStyleCombo =
new
QComboBox();
m_joinStyleCombo-&
gt;addItem("MiterJoin"
, Qt::
MiterJoin);
m_joinStyleCombo-&
gt;addItem("BevelJoin"
, Qt::
BevelJoin);
m_joinStyleCombo-&
gt;addItem("RoundJoin"
, Qt::
RoundJoin);
m_joinStyleCombo-&
gt;addItem("SvgMiterJoin"
, Qt::
SvgMiterJoin);
QFormLayout *
layout =
new
QFormLayout();
layout-&
gt;addRow("Color"
, m_colorButton);
layout-&
gt;addRow("Width"
, m_widthSpinBox);
layout-&
gt;addRow("Style"
, m_styleCombo);
layout-&
gt;addRow("Cap style"
, m_capStyleCombo);
layout-&
gt;addRow("Join style"
, m_joinStyleCombo);
setLayout(layout);
// Use old style connect on some signals because the signal is overloaded
connect(m_colorButton, &
amp;QPushButton::
clicked, this
, &
amp;PenTool::
showColorDialog);
connect(m_widthSpinBox,
static_cast
&
lt;void
(QDoubleSpinBox::
*
)(double
)&
gt;(&
amp;QDoubleSpinBox::
valueChanged),
this
, &
amp;PenTool::
updateWidth);
connect(m_styleCombo,
static_cast
&
lt;void
(QComboBox::
*
)(int
)&
gt;(&
amp;QComboBox::
currentIndexChanged),
this
, &
amp;PenTool::
updateStyle);
connect(m_capStyleCombo,
static_cast
&
lt;void
(QComboBox::
*
)(int
)&
gt;(&
amp;QComboBox::
currentIndexChanged),
this
, &
amp;PenTool::
updateCapStyle);
connect(m_joinStyleCombo,
static_cast
&
lt;void
(QComboBox::
*
)(int
)&
gt;(&
amp;QComboBox::
currentIndexChanged),
this
, &
amp;PenTool::
updateJoinStyle);
}
void
PenTool::
setPen(const
QPen &
amp;pen)
{
m_pen =
pen;
m_colorButton-&
gt;setText(m_pen.color().name());
m_widthSpinBox-&
gt;setValue(m_pen.widthF());
m_styleCombo-&
gt;setCurrentIndex(m_pen.style()); // index matches the enum
m_capStyleCombo-&
gt;setCurrentIndex(m_capStyleCombo-&
gt;findData(m_pen.capStyle()));
m_joinStyleCombo-&
gt;setCurrentIndex(m_joinStyleCombo-&
gt;findData(m_pen.joinStyle()));
}
QPen PenTool::
pen() const
{
return
m_pen;
}
QString PenTool::
name()
{
return
name(m_pen);
}
QString PenTool::
name(const
QPen &
amp;pen)
{
return
pen.color().name() +
":"
+
QString::
number(pen.widthF());
}
void
PenTool::
showColorDialog()
{
QColorDialog dialog(m_pen.color());
dialog.show();
dialog.exec();
m_pen.setColor(dialog.selectedColor());
m_colorButton-&
gt;setText(m_pen.color().name());
emit changed();
}
void
PenTool::
updateWidth(double
width)
{
if
(!
qFuzzyCompare((qreal) width, m_pen.widthF())) {
m_pen.setWidthF(width);
emit changed();
}
}
void
PenTool::
updateStyle(int
style)
{
if
(m_pen.style() !=
style) {
m_pen.setStyle((Qt::
PenStyle) style);
emit changed();
}
}
void
PenTool::
updateCapStyle(int
index)
{
Qt::
PenCapStyle capStyle =
(Qt::
PenCapStyle) m_capStyleCombo-&
gt;itemData(index).toInt();
if
(m_pen.capStyle() !=
capStyle) {
m_pen.setCapStyle(capStyle);
emit changed();
}
}
void
PenTool::
updateJoinStyle(int
index)
{
Qt::
PenJoinStyle joinStyle =
(Qt::
PenJoinStyle) m_joinStyleCombo-&
gt;itemData(index).toInt();
if
(m_pen.joinStyle() !=
joinStyle) {
m_pen.setJoinStyle(joinStyle);
emit changed();
}
}
#include
"moc_pentool.cpp"