##// END OF EJS Templates
Refactored chartwidgettest test data impl
Refactored chartwidgettest test data impl

File last commit:

r277:704deaf5754b
r278:1d8f8b316dca
Show More
qchartview.cpp
283 lines | 7.6 KiB | text/x-c | CppLexer
#include "qchartview.h"
#include "qchart.h"
#include "qchartaxis.h"
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QRubberBand>
#include <QResizeEvent>
#include <QDebug>
/*!
\class QChartView
\brief Chart widget
QChartView is a standalone widget that can display charts. It does not require QGraphicsScene to work. It manages the graphical
representation of different types of QChartSeries and other chart related objects like
QChartAxis and QChartLegend. If you want to display a chart in your existing QGraphicsScene, you can use the QChart class instead.
\sa QChart
*/
QTCOMMERCIALCHART_BEGIN_NAMESPACE
QChartView::QChartView(QWidget *parent) :
QGraphicsView(parent),
m_scene(new QGraphicsScene(this)),
m_chart(new QChart()),
m_rubberBand(0),
m_verticalRubberBand(false),
m_horizonalRubberBand(false)
{
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setScene(m_scene);
m_chart->setMargin(50);
m_scene->addItem(m_chart);
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
}
/*!
Destroys the object and it's children, like QChartSeries and QChartAxis object added to it.
*/
QChartView::~QChartView()
{
}
void QChartView::resizeEvent(QResizeEvent *event)
{
m_scene->setSceneRect(0,0,size().width(),size().height());
m_chart->resize(size());
QWidget::resizeEvent(event);
}
/*!
Adds the series and optional y axis onto the chart and takes the ownership of the objects.
If auto scaling is enabled, re-scales the axes the series is bound to (both the x axis and
the y axis).
\sa removeSeries, removeAllSeries
*/
void QChartView::addSeries(QChartSeries* series,QChartAxis *axisY)
{
m_chart->addSeries(series,axisY);
}
/*!
Removes the QChartSeries specified in a perameter from the QChartView.
It releses its ownership of the specified QChartSeries object.
It does not delete the pointed QChartSeries data object
\sa removeSeries(), removeAllSeries()
*/
void QChartView::removeSeries(QChartSeries* series)
{
m_chart->removeSeries(series);
}
/*!
Removes all the QChartSeries that have been added to the QChartView
It also deletes the pointed QChartSeries data objects
\sa addSeries(), removeSeries()
*/
void QChartView::removeAllSeries()
{
m_chart->removeAllSeries();
}
void QChartView::zoomIn()
{
m_chart->zoomIn();
}
void QChartView::zoomIn(const QRect& rect)
{
m_chart->zoomIn(rect);
}
void QChartView::zoomOut()
{
m_chart->zoomOut();
}
/*!
Returns the chart margin, which is the distance between the widget edge and the part of the chart where the actual data can be displayed.
*/
int QChartView::margin() const
{
return m_chart->margin();
}
/*!
Sets the chart \a tile. A description text that is rendered above the chart.
*/
void QChartView::setChartTitle(const QString& title)
{
m_chart->setChartTitle(title);
}
/*!
Sets the \a font that is used for rendering the description text that is rendered above the chart.
*/
void QChartView::setChartTitleFont(const QFont& font)
{
m_chart->setChartTitleFont(font);
}
/*!
Sets the \a brush that is used for painting the background of the chart area of the QChartView widget.
*/
void QChartView::setChartBackgroundBrush(const QBrush& brush)
{
m_chart->setChartBackgroundBrush(brush);
}
/*!
Sets the \a pen that is used for painting the background of the chart area of the QChartView widget.
*/
void QChartView::setChartBackgroundPen(const QPen& pen)
{
m_chart->setChartBackgroundPen(pen);
}
void QChartView::setRubberBandPolicy(const RubberBandPolicy policy)
{
switch(policy) {
case VerticalRubberBand:
m_verticalRubberBand = true;
m_horizonalRubberBand = false;
break;
case HorizonalRubberBand:
m_verticalRubberBand = false;
m_horizonalRubberBand = true;
break;
case RectangleRubberBand:
m_verticalRubberBand = true;
m_horizonalRubberBand = true;
break;
case NoRubberBand:
default:
delete m_rubberBand;
m_rubberBand=0;
m_horizonalRubberBand = false;
m_verticalRubberBand = false;
return;
}
if(!m_rubberBand) {
m_rubberBand = new QRubberBand(QRubberBand::Rectangle, this);
m_rubberBand->setEnabled(true);
}
}
QChartView::RubberBandPolicy QChartView::rubberBandPolicy() const
{
if(m_horizonalRubberBand && m_verticalRubberBand) return RectangleRubberBand;
if(m_horizonalRubberBand) return HorizonalRubberBand;
if(m_verticalRubberBand) return VerticalRubberBand;
return NoRubberBand;
}
void QChartView::mousePressEvent(QMouseEvent *event)
{
if(m_rubberBand && m_rubberBand->isEnabled() && event->button() == Qt::LeftButton) {
int margin = m_chart->margin();
QRect rect(margin, margin, width() - 2 * margin, height() - 2 * margin);
if (rect.contains(event->pos())) {
m_rubberBandOrigin = event->pos();
m_rubberBand->setGeometry(QRect(m_rubberBandOrigin, QSize()));
m_rubberBand->show();
event->accept();
}
}
}
void QChartView::mouseMoveEvent(QMouseEvent *event)
{
if(m_rubberBand && m_rubberBand->isVisible()) {
int margin = m_chart->margin();
QRect rect(margin, margin, width() - 2 * margin, height() - 2 * margin);
int width = event->pos().x() - m_rubberBandOrigin.x();
int height = event->pos().y() - m_rubberBandOrigin.y();
if(!m_verticalRubberBand) {
m_rubberBandOrigin.setY(rect.top());
height = rect.height();
}
if(!m_horizonalRubberBand) {
m_rubberBandOrigin.setX(rect.left());
width= rect.width();
}
m_rubberBand->setGeometry(QRect(m_rubberBandOrigin.x(),m_rubberBandOrigin.y(), width,height).normalized());
}
else {
QGraphicsView::mouseMoveEvent(event);
}
}
void QChartView::mouseReleaseEvent(QMouseEvent *event)
{
if(m_rubberBand) {
if (event->button() == Qt::LeftButton && m_rubberBand->isVisible()) {
m_rubberBand->hide();
QRect rect = m_rubberBand->geometry();
m_chart->zoomIn(rect);
event->accept();
}
if(event->button()==Qt::RightButton)
m_chart->zoomReset();
}
else {
QGraphicsView::mouseReleaseEvent(event);
}
}
void QChartView::keyPressEvent(QKeyEvent *event)
{
switch (event->key()) {
case Qt::Key_Plus:
zoomIn();
break;
case Qt::Key_Minus:
zoomOut();
break;
default:
QGraphicsView::keyPressEvent(event);
break;
}
}
/*!
Sets the \a theme used by the chart for rendering the graphical representation of the data
\sa QChart::ChartTheme, chartTheme()
*/
void QChartView::setChartTheme(QChart::ChartTheme theme)
{
m_chart->setChartTheme(theme);
}
/*!
Returns the theme enum used by the chart.
\sa setChartTheme()
*/
QChart::ChartTheme QChartView::chartTheme() const
{
return m_chart->chartTheme();
}
/*!
Returns the pointer to the x axis object of the chart
*/
QChartAxis* QChartView::axisX() const
{
return m_chart->axisX();
}
/*!
Returns the pointer to the y axis object of the chart
*/
QChartAxis* QChartView::axisY() const
{
return m_chart->axisY();
}
QTCOMMERCIALCHART_END_NAMESPACE