#include <QLineSeries>
QtChartDemoZoom::QtChartDemoZoom(QWidget* pParent
)
: QChartView(pParent)
, m_bMiddleButtonPressed(
false
)
, m_oPrePos(0, 0)
{
QLineSeries *pLineServies =
new
QLineSeries();
for
(
int
i = 0; i < 100; ++i)
{
pLineServies->append(i, qrand() % 10);
}
this
->chart()->addSeries(pLineServies);
this
->chart()->createDefaultAxes();
}
QtChartDemoZoom::~QtChartDemoZoom()
{
}
void
QtChartDemoZoom::mouseMoveEvent(QMouseEvent *pEvent)
{
if
(m_bMiddleButtonPressed)
{
QPoint oDeltaPos = pEvent->pos() - m_oPrePos;
this
->chart()->scroll(-oDeltaPos.x(), oDeltaPos.y());
m_oPrePos = pEvent->pos();
}
__super::mouseMoveEvent(pEvent);
}
void
QtChartDemoZoom::mousePressEvent(QMouseEvent *pEvent)
{
if
(pEvent->button() == Qt::MiddleButton)
{
m_bMiddleButtonPressed =
true
;
m_oPrePos = pEvent->pos();
this
->setCursor(Qt::OpenHandCursor);
}
__super::mousePressEvent(pEvent);
}
void
QtChartDemoZoom::mouseReleaseEvent(QMouseEvent *pEvent)
{
if
(pEvent->button() == Qt::MiddleButton)
{
m_bMiddleButtonPressed =
false
;
this
->setCursor(Qt::ArrowCursor);
}
__super::mouseReleaseEvent(pEvent);
}
void
QtChartDemoZoom::wheelEvent(QWheelEvent *pEvent)
{
qreal rVal = std::
pow
(0.999, pEvent->delta());
QRectF oPlotAreaRect =
this
->chart()->plotArea();
QPointF oCenterPoint = oPlotAreaRect.center();
oPlotAreaRect.setWidth(oPlotAreaRect.width() * rVal);
oPlotAreaRect.setHeight(oPlotAreaRect.height() * rVal);
QPointF oNewCenterPoint(2 * oCenterPoint - pEvent->pos() - (oCenterPoint - pEvent->pos()) / rVal);
oPlotAreaRect.moveCenter(oNewCenterPoint);
this
->chart()->zoomIn(oPlotAreaRect);
__super::wheelEvent(pEvent);
}