checkpoint: array visualizer.

This commit is contained in:
Ernie Pasveer
2022-03-19 15:49:40 -05:00
parent 7422bec1af
commit 8e19c0ba58
11 changed files with 362 additions and 10 deletions
+133
View File
@@ -0,0 +1,133 @@
#include "QZoomChartView.h"
#include <QtGui/QMouseEvent>
#include <QtGui/QGuiApplication>
#include <QtWidgets/QApplication>
#include <QtCore/QDebug>
QZoomChartView::QZoomChartView (QWidget* parent) : QChartView(parent) {
_isDragging = false;
setRubberBand(QChartView::RectangleRubberBand);
}
QZoomChartView::QZoomChartView (QChart* chart, QWidget* parent) : QChartView(chart, parent) {
_isDragging = false;
setRubberBand(QChartView::RectangleRubberBand);
}
bool QZoomChartView::viewportEvent (QEvent* event) {
return QChartView::viewportEvent(event);
}
void QZoomChartView::mousePressEvent (QMouseEvent* event) {
if (event->button() == Qt::LeftButton) {
_keyboardModifiers = QGuiApplication::keyboardModifiers();
if (_keyboardModifiers == Qt::ShiftModifier) {
QApplication::setOverrideCursor(QCursor(Qt::SizeAllCursor));
setRubberBand(QChartView::NoRubberBand);
_lastMousePos = event->pos();
_isDragging = true;
event->accept();
}else{
setRubberBand(QChartView::RectangleRubberBand);
}
}
QChartView::mousePressEvent(event);
}
void QZoomChartView::mouseMoveEvent (QMouseEvent* event) {
// pan the chart with a left mouse drag
if (event->buttons() & Qt::LeftButton) {
if (_keyboardModifiers == Qt::ShiftModifier) {
auto dPos = event->pos() - _lastMousePos;
chart()->scroll(-dPos.x(), dPos.y());
_lastMousePos = event->pos();
event->accept();
}
}
QChartView::mouseMoveEvent(event);
}
void QZoomChartView::mouseReleaseEvent (QMouseEvent* event) {
if (_isDragging) {
QApplication::restoreOverrideCursor();
_isDragging = false;
}
QChartView::mouseReleaseEvent(event);
}
void QZoomChartView::wheelEvent (QWheelEvent* event) {
// https://stackoverflow.com/questions/48623595/scale-x-axis-of-qchartview-using-mouse-wheel
qreal factor = event->angleDelta().y() > 0 ? 0.5 : 2.0;
chart()->zoom(factor);
event->accept();
QChartView::wheelEvent(event);
}
void QZoomChartView::keyPressEvent (QKeyEvent* event) {
switch (event->key()) {
case Qt::Key_Plus:
chart()->zoomIn();
break;
case Qt::Key_Minus:
chart()->zoomOut();
break;
case Qt::Key_Escape:
chart()->zoomReset();
break;
case Qt::Key_Left:
chart()->scroll(-10, 0);
break;
case Qt::Key_Right:
chart()->scroll(10, 0);
break;
case Qt::Key_Up:
chart()->scroll(0, 10);
break;
case Qt::Key_Down:
chart()->scroll(0, -10);
break;
default:
QGraphicsView::keyPressEvent(event);
break;
}
}
void QZoomChartView::enterEvent (QEvent* event) {
Q_UNUSED(event);
setFocus();
}
void QZoomChartView::leaveEvent (QEvent* event) {
Q_UNUSED(event);
}