qchartview.cpp
227 lines
| 5.5 KiB
| text/x-c
|
CppLexer
/ src / qchartview.cpp
Michal Klocek
|
r58 | #include "qchartview.h" | ||
#include "qchart.h" | ||||
#include <QGraphicsView> | ||||
#include <QGraphicsScene> | ||||
#include <QRubberBand> | ||||
#include <QResizeEvent> | ||||
#include <QDebug> | ||||
QTCOMMERCIALCHART_BEGIN_NAMESPACE | ||||
QChartView::QChartView(QWidget *parent) : | ||||
QGraphicsView(parent), | ||||
m_scene(new QGraphicsScene()), | ||||
Michal Klocek
|
r136 | m_chart(new QChart()), | ||
m_rubberBand(0), | ||||
m_verticalRubberBand(false), | ||||
m_horizonalRubberBand(false) | ||||
Michal Klocek
|
r58 | { | ||
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); | ||||
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); | ||||
setScene(m_scene); | ||||
m_chart->setMargin(50); | ||||
m_scene->addItem(m_chart); | ||||
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); | ||||
} | ||||
QChartView::~QChartView() | ||||
{ | ||||
} | ||||
void QChartView::resizeEvent(QResizeEvent *event) | ||||
{ | ||||
m_scene->setSceneRect(0,0,size().width(),size().height()); | ||||
Michal Klocek
|
r115 | m_chart->resize(size()); | ||
Michal Klocek
|
r58 | QWidget::resizeEvent(event); | ||
} | ||||
void QChartView::addSeries(QChartSeries* series) | ||||
{ | ||||
m_chart->addSeries(series); | ||||
} | ||||
Tero Ahola
|
r61 | QChartSeries* QChartView::createSeries(QChartSeries::QChartSeriesType type) | ||
Michal Klocek
|
r58 | { | ||
Tero Ahola
|
r61 | return m_chart->createSeries(type); | ||
Michal Klocek
|
r58 | } | ||
Michal Klocek
|
r67 | void QChartView::zoomInToRect(const QRect& rectangle) | ||
Michal Klocek
|
r58 | { | ||
Michal Klocek
|
r67 | m_chart->zoomInToRect(rectangle); | ||
Michal Klocek
|
r58 | } | ||
Michal Klocek
|
r67 | void QChartView::zoomIn() | ||
Michal Klocek
|
r58 | { | ||
Michal Klocek
|
r67 | m_chart->zoomIn(); | ||
Michal Klocek
|
r58 | } | ||
Michal Klocek
|
r67 | void QChartView::zoomOut() | ||
Michal Klocek
|
r58 | { | ||
Michal Klocek
|
r67 | m_chart->zoomOut(); | ||
Michal Klocek
|
r58 | } | ||
Michal Klocek
|
r67 | int QChartView::margin() const | ||
{ | ||||
return m_chart->margin(); | ||||
} | ||||
Michal Klocek
|
r69 | |||
void QChartView::setTitle(const QString& title) | ||||
{ | ||||
m_chart->setTitle(title); | ||||
} | ||||
Michal Klocek
|
r122 | void QChartView::setChartBackgroundBrush(const QBrush& brush) | ||
{ | ||||
m_chart->setChartBackgroundBrush(brush); | ||||
} | ||||
void QChartView::setChartBackgroundPen(const QPen& pen) | ||||
{ | ||||
m_chart->setChartBackgroundPen(pen); | ||||
} | ||||
Michal Klocek
|
r136 | |||
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; | ||||
} | ||||
Michal Klocek
|
r138 | if(!m_rubberBand){ | ||
Michal Klocek
|
r136 | m_rubberBand = new QRubberBand(QRubberBand::Rectangle, this); | ||
m_rubberBand->setEnabled(true); | ||||
Michal Klocek
|
r138 | } | ||
Michal Klocek
|
r136 | } | ||
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->zoomInToRect(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; | ||||
} | ||||
} | ||||
Michal Klocek
|
r153 | void QChartView::setChartTheme(QChart::ChartTheme theme) | ||
Michal Klocek
|
r136 | { | ||
Michal Klocek
|
r153 | m_chart->setChartTheme(theme); | ||
Michal Klocek
|
r136 | } | ||
Michal Klocek
|
r153 | QChart::ChartTheme QChartView::chartTheme() const | ||
{ | ||||
return m_chart->chartTheme(); | ||||
} | ||||
Michal Klocek
|
r136 | |||
Michal Klocek
|
r155 | QChartAxis* QChartView::axisX() | ||
{ | ||||
return m_chart->axisX(); | ||||
} | ||||
QChartAxis* QChartView::axisY() | ||||
{ | ||||
return m_chart->axisY(); | ||||
} | ||||
QChartAxis* QChartView::addAxisX() | ||||
{ | ||||
return m_chart->addAxisX(); | ||||
} | ||||
QChartAxis* QChartView::addAxisY() | ||||
{ | ||||
return m_chart->addAxisY(); | ||||
} | ||||
void QChartView::removeAxis(QChartAxis* axis) | ||||
{ | ||||
m_chart->removeAxis(axis); | ||||
} | ||||
Michal Klocek
|
r58 | QTCOMMERCIALCHART_END_NAMESPACE | ||