##// END OF EJS Templates
Added candlestick chart type...
Added candlestick chart type - added QCandlestickSeries - added QCandlestickSet - added QCandlestickLegendMarker - added model mappers - added Candlestick, CandlestickChartItem, CandlestickData - added SeriesTypeCandlestick to SeriesType enum - added LegendMarkerTypeCandlestick to LegendMarkerType enum - added candlestick chart example - added QML candlestick chart example - added candlestick tester - added autotests - added documentation [ChangeLog][CandlestickChart] Added new chart type: Candlestick Chart. Task-number: QTBUG-50544 Change-Id: I17d18dfa23e0ea209bf51ab1e349585b9cb50a8f Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>

File last commit:

r2896:facc2941efbf
r2896:facc2941efbf
Show More
qcandlestickset.cpp
487 lines | 10.9 KiB | text/x-c | CppLexer
/****************************************************************************
**
** 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 <QtCharts/QCandlestickSet>
#include <private/qcandlestickset_p.h>
QT_CHARTS_BEGIN_NAMESPACE
/*!
\class QCandlestickSet
\since 5.8
\inmodule Qt Charts
\brief Building block for a candlestick chart.
QCandlestickSet represents a single candlestick item in a QCandlestickSeries. It takes five
values to create a graphical representation of a candlestick item: \e open, \e high, \e low,
\e close, and \e timestamp. These values can be either passed to a QCandlestickSet constructor,
or set by using setOpen(), setHigh(), setLow(), setClose(), and setTimestamp().
\sa QCandlestickSeries
*/
/*!
\qmltype CandlestickSet
\since 2.2
\instantiates QCandlestickSet
\inqmlmodule QtCharts
\brief Building block for a candlestick chart.
CandlestickSet represents a single candlestick item in a CandlestickSeries. It takes five
values to create a graphical representation of a candlestick item: \l open, \l high, \l low,
\l close, and \l timestamp.
\sa CandlestickSeries
*/
/*!
\property QCandlestickSet::timestamp
\brief The timestamp value of the set.
*/
/*!
\qmlproperty qreal CandlestickSet::timestamp
\brief The timestamp value of the set.
*/
/*!
\property QCandlestickSet::open
\brief The open value of the set.
*/
/*!
\qmlproperty qreal CandlestickSet::open
\brief The open value of the set.
*/
/*!
\property QCandlestickSet::high
\brief The high value of the set.
*/
/*!
\qmlproperty qreal CandlestickSet::high
\brief The high value of the set.
*/
/*!
\property QCandlestickSet::low
\brief The low value of the set.
*/
/*!
\qmlproperty qreal CandlestickSet::low
\brief The low value of the set.
*/
/*!
\property QCandlestickSet::close
\brief The close value of the set.
*/
/*!
\qmlproperty qreal CandlestickSet::close
\brief The close value of the set.
*/
/*!
\property QCandlestickSet::brush
\brief The brush used for drawing the candlestick.
*/
/*!
\property QCandlestickSet::pen
\brief The pen used for drawing the candlestick.
*/
/*!
\qmlproperty QString CandlestickSet::brushFilename
\brief The name of the file used as a brush for the set.
*/
/*!
\fn void QCandlestickSet::clicked()
\brief Emitted when the candlestick item is clicked (pressed and released).
*/
/*!
\qmlsignal CandlestickSet::clicked()
\brief Emitted when the candlestick item is clicked (pressed and released).
The corresponding signal handler is \c {onClicked}.
*/
/*!
\fn void QCandlestickSet::hovered(bool status)
\brief Emitted when there is change in hover \a status over a candlestick item.
Parameter \a status indicates whether the mouse has entered (\c true) or left (\c false) the
area of the candlestick item.
*/
/*!
\qmlsignal CandlestickSet::hovered(bool status)
\brief Emitted when there is change in hover \a status over a candlestick item.
Parameter \a status indicates whether the mouse has entered (\c true) or left (\c false) the
area of the candlestick item.
The corresponding signal handler is \c {onHovered}.
*/
/*!
\fn void QCandlestickSet::pressed()
\brief Emitted when there is a press on a candlestick item.
*/
/*!
\qmlsignal CandlestickSet::pressed()
\brief Emitted when there is a press on a candlestick item.
The corresponding signal handler is \c {onPressed}.
*/
/*!
\fn void QCandlestickSet::released()
\brief Emitted when there is a release on a candlestick item.
*/
/*!
\qmlsignal CandlestickSet::released()
\brief Emitted when there is a release on a candlestick item.
The corresponding signal handler is \c {onReleased}.
*/
/*!
\fn void QCandlestickSet::doubleClicked()
\brief Emitted when there is a double-click on a candlestick item.
*/
/*!
\qmlsignal CandlestickSet::doubleClicked()
\brief Emitted when there is a double-click on a candlestick item.
The corresponding signal handler is \c {onDoubleClicked}.
*/
/*!
\fn void QCandlestickSet::timestampChanged()
\brief Emitted when the candlestick item timestamp is changed.
\sa timestamp
*/
/*!
\qmlsignal CandlestickSet::timestampChanged()
\brief Emitted when the candlestick item timestamp is changed.
\sa timestamp
The corresponding signal handler is \c {onTimestampChanged}.
*/
/*!
\fn void QCandlestickSet::openChanged()
\brief Emitted when the candlestick item open value is changed.
\sa open
*/
/*!
\qmlsignal CandlestickSet::openChanged()
\brief Emitted when the candlestick item open value is changed.
\sa open
The corresponding signal handler is \c {onOpenChanged}.
*/
/*!
\fn void QCandlestickSet::highChanged()
\brief Emitted when the candlestick item high value is changed.
\sa high
*/
/*!
\qmlsignal CandlestickSet::highChanged()
\brief Emitted when the candlestick item high value is changed.
\sa high
The corresponding signal handler is \c {onHighChanged}.
*/
/*!
\fn void QCandlestickSet::lowChanged()
\brief Emitted when the candlestick item low value is changed.
\sa low
*/
/*!
\qmlsignal CandlestickSet::lowChanged()
\brief Emitted when the candlestick item low value is changed.
\sa low
The corresponding signal handler is \c {onLowChanged}.
*/
/*!
\fn void QCandlestickSet::closeChanged()
\brief Emitted when the candlestick item close value is changed.
\sa close
*/
/*!
\qmlsignal CandlestickSet::closeChanged()
\brief Emitted when the candlestick item close value is changed.
\sa close
The corresponding signal handler is \c {onCloseChanged}.
*/
/*!
\fn void QCandlestickSet::brushChanged()
\brief Emitted when the candlestick item brush is changed.
\sa brush
*/
/*!
\fn void QCandlestickSet::penChanged()
\brief Emitted when the candlestick item pen is changed.
\sa pen
*/
/*!
Constructs a QCandlestickSet with an optional \a timestamp and a \a parent.
*/
QCandlestickSet::QCandlestickSet(qreal timestamp, QObject *parent)
: QObject(parent),
d_ptr(new QCandlestickSetPrivate(timestamp, this))
{
}
/*!
Constructs a QCandlestickSet with given ordered values. The values \a open, \a high, \a low
and \a close are mandatory. The values \a timestamp and \a parent are optional.
*/
QCandlestickSet::QCandlestickSet(qreal open, qreal high, qreal low, qreal close, qreal timestamp,
QObject *parent)
: QObject(parent),
d_ptr(new QCandlestickSetPrivate(timestamp, this))
{
Q_D(QCandlestickSet);
d->m_open = open;
d->m_high = high;
d->m_low = low;
d->m_close = close;
emit d->updatedLayout();
}
/*!
Destroys the set.
*/
QCandlestickSet::~QCandlestickSet()
{
}
void QCandlestickSet::setTimestamp(qreal timestamp)
{
Q_D(QCandlestickSet);
bool changed = d->setTimestamp(timestamp);
if (!changed)
return;
emit d->updatedLayout();
emit timestampChanged();
}
qreal QCandlestickSet::timestamp() const
{
Q_D(const QCandlestickSet);
return d->m_timestamp;
}
void QCandlestickSet::setOpen(qreal open)
{
Q_D(QCandlestickSet);
if (d->m_open == open)
return;
d->m_open = open;
emit d->updatedLayout();
emit openChanged();
}
qreal QCandlestickSet::open() const
{
Q_D(const QCandlestickSet);
return d->m_open;
}
void QCandlestickSet::setHigh(qreal high)
{
Q_D(QCandlestickSet);
if (d->m_high == high)
return;
d->m_high = high;
emit d->updatedLayout();
emit highChanged();
}
qreal QCandlestickSet::high() const
{
Q_D(const QCandlestickSet);
return d->m_high;
}
void QCandlestickSet::setLow(qreal low)
{
Q_D(QCandlestickSet);
if (d->m_low == low)
return;
d->m_low = low;
emit d->updatedLayout();
emit lowChanged();
}
qreal QCandlestickSet::low() const
{
Q_D(const QCandlestickSet);
return d->m_low;
}
void QCandlestickSet::setClose(qreal close)
{
Q_D(QCandlestickSet);
if (d->m_close == close)
return;
d->m_close = close;
emit d->updatedLayout();
emit closeChanged();
}
qreal QCandlestickSet::close() const
{
Q_D(const QCandlestickSet);
return d->m_close;
}
void QCandlestickSet::setBrush(const QBrush &brush)
{
Q_D(QCandlestickSet);
if (d->m_brush == brush)
return;
d->m_brush = brush;
emit d->updatedCandlestick();
emit brushChanged();
}
QBrush QCandlestickSet::brush() const
{
Q_D(const QCandlestickSet);
return d->m_brush;
}
void QCandlestickSet::setPen(const QPen &pen)
{
Q_D(QCandlestickSet);
if (d->m_pen == pen)
return;
d->m_pen = pen;
emit d->updatedCandlestick();
emit penChanged();
}
QPen QCandlestickSet::pen() const
{
Q_D(const QCandlestickSet);
return d->m_pen;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
QCandlestickSetPrivate::QCandlestickSetPrivate(qreal timestamp, QCandlestickSet *parent)
: QObject(parent),
q_ptr(parent),
m_timestamp(0.0),
m_open(0.0),
m_high(0.0),
m_low(0.0),
m_close(0.0),
m_brush(QBrush(Qt::NoBrush)),
m_pen(QPen(Qt::NoPen)),
m_series(nullptr)
{
setTimestamp(timestamp);
}
QCandlestickSetPrivate::~QCandlestickSetPrivate()
{
}
bool QCandlestickSetPrivate::setTimestamp(qreal timestamp)
{
timestamp = qMax(timestamp, 0.0);
timestamp = qRound64(timestamp);
if (m_timestamp == timestamp)
return false;
m_timestamp = timestamp;
return true;
}
#include "moc_qcandlestickset.cpp"
#include "moc_qcandlestickset_p.cpp"
QT_CHARTS_END_NAMESPACE