bool BaseViewer::zoomOnWheelEvent(QEvent * e) { if (e->type() == QEvent::Wheel) { QWheelEvent * event = static_cast<QWheelEvent*>(e); // mouse has X units that covers 360 degrees. Zoom when 15 degrees is provided #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)) QPoint numDegrees = event->angleDelta() / 8; #else QPoint numDegrees(0,event->delta() / 8); #endif if (!numDegrees.isNull()) { if (numDegrees.y() >= 15) { // Zoom in if (_zoomLevel+1<=_zoomMaxLevel) centerOnAtZoom(_zoomLevel+1); } else if (numDegrees.y() <= -15) { // Zoom out if (_zoomLevel-1>=_zoomMinLevel) centerOnAtZoom(_zoomLevel-1); } event->accept(); return true; } return true; } return false; }
bool MainWindow::eventFilter(QObject *obj, QEvent *event) { QClipboard * clipboard = QApplication::clipboard(); //added by AiO if ( obj == canvas->viewport() ) { // paint if ( event->type() == QEvent::Paint ) { set_drawing_rectangle(canvas->viewport()->size().width(), canvas->viewport()->size().height()); QPainter p(canvas->viewport()); p.setPen(Qt::black); p.setBrush(Qt::green); PaintStruct ps; ps.p = &p; ps.border = 2; drawGraph(&ps); } // mouse else if ( event->type() == QEvent::MouseMove ) { QMouseEvent *mevent = (QMouseEvent *) event; if ( qApp->overrideCursor() ) { //cursor is overridden, we are panning if ( mevent->x() != ox || mevent->y() != oy ) { move_focus(ox - mevent->x(), oy - mevent->y()); ox = mevent->x(); oy = mevent->y(); canvas->viewport()->update(); //update(); } } } else if ( event->type() == QEvent::MouseButtonPress ) { QMouseEvent *mevent = (QMouseEvent *) event; if ( mevent->button() == Qt::LeftButton ) { Qt::KeyboardModifiers mods = mevent->modifiers(); if (mods & Qt::ShiftModifier) zoomIn(); else if (mods & Qt::ControlModifier) zoomOut(); if ( !sticky ) { qApp->setOverrideCursor(*MOVING_CURSOR); } else { if ( qApp->overrideCursor() ) { //cursor is already overridden, release it qApp->restoreOverrideCursor(); canvas->setMouseTracking(false); } else { qApp->setOverrideCursor(*MOVING_CURSOR); canvas->setMouseTracking(true); } } ox = mevent->x(); oy = mevent->y(); } else if(mevent->button() == Qt::RightButton ) //Added by AiO { //query the cordinates of the mouse for node char curNodeTitle[1024]; char * curNode; char *index; //used for search QMessageBox msgBox; curNode = node_xy_title(mevent->x(),mevent->y()); if(curNode == 0) return true; strncpy(curNodeTitle, curNode, 1024-1); curNodeTitle[1024-1] = 0; //label ends with ':' //test for color characters format sym num num TEXT sym : // replace : -1 with 0 and use &curNodeTitle[3] //test with popup if(curNodeTitle[0] == 0x0c) { index = strchr(curNodeTitle, ':'); if(index == 0) goto nocolon; //test for no label but color --index; --index; --index; *index = 0; msgBox.setText(&curNodeTitle[3]); clipboard->setText(&curNodeTitle[3]); } else { nocolon: msgBox.setText(curNodeTitle); clipboard->setText(curNodeTitle); } msgBox.exec(); } } else if ( event->type() == QEvent::MouseButtonRelease ) { if ( !sticky ) qApp->restoreOverrideCursor(); } // wheel else if ( event->type() == QEvent::Wheel ) { QWheelEvent *wevent = (QWheelEvent *) event; if ( (qApp->keyboardModifiers() & Qt::ControlModifier) != 0 ) { wevent->accept(); int numDegrees = wevent->delta() / 8; int numSteps = numDegrees / 15; if ( numSteps < 0) { numSteps = -numSteps; for ( int x = 0; x < numSteps; x++ ) zoomOut(); } else { for ( int x = 0; x < numSteps; x++ ) zoomIn(); } return true; } else { bool ret = QMainWindow::eventFilter(obj, event); QAbstractSlider *slider = (QAbstractSlider *) (wevent->orientation() == Qt::Vertical? canvas->verticalScrollBar() : canvas->horizontalScrollBar()); int ScrollPos = slider->sliderPosition(); bool reset_slider; calc_scroll(QAbstractSlider::SliderMove + 100, ScrollPos, reset_slider); slider->setSliderPosition(ScrollPos); return ret; } } // keyboard else if ( event->type() == QEvent::KeyPress ) { QKeyEvent *kevent = (QKeyEvent *) event; int key = kevent->key(); KeyDown(key, kevent->modifiers()); if ( key == 0 ) { event->accept(); return true; } } } return QMainWindow::eventFilter(obj, event); }
bool MapUserInteraction::eventFilter(QObject *obj, QEvent *event) { Q_UNUSED(obj); Q_D(MapUserInteraction); Q_ASSERT(d->map); MapHelper *helper = d->map->helper(); // qDebug() << "Event" << event->type() << helper; if (!helper) return false; switch (event->type()) { case QEvent::MouseButtonPress: { QMouseEvent *e = static_cast<QMouseEvent*>(event); if (helper->mouseDown(e)) e->accept(); break; } case QEvent::MouseButtonRelease: { QMouseEvent *e = static_cast<QMouseEvent*>(event); if (helper->mouseUp(e)) e->accept(); break; } case QEvent::MouseMove: { QMouseEvent *e = static_cast<QMouseEvent*>(event); if (helper->mouseMove(e)) e->accept(); break; } case QEvent::Wheel: { QWheelEvent *e = static_cast<QWheelEvent*>(event); if (helper->wheelEvent(e)) e->accept(); break; } case QEvent::KeyPress: { QKeyEvent *e = static_cast<QKeyEvent*>(event); if (helper->keyPress(e)) e->accept(); break; } case QEvent::KeyRelease: { QKeyEvent *e = static_cast<QKeyEvent*>(event); if (helper->keyRelease(e)) e->accept(); break; } case QEvent::Gesture: { #if 0 static bool even = false; even = !even; // ХЗ почему, но ТАП-ХОЛД срабатывает дважды. Чётные срабатывание откидываем if (even) helper->gesture(static_cast<QGestureEvent *>(event)); #endif break; #if 0 if (QGesture *swipe = ge->gesture(Qt::SwipeGesture)) { LogD("GE") << "SwipeGesture"; static_cast<QSwipeGesture *>(swipe); } if (QGesture *pan = ge->gesture(Qt::PanGesture)) { static_cast<QPanGesture *>(pan); LogD("GE") << "PanGesture"; } #endif } case QEvent::TouchBegin: { QTouchEvent *e = static_cast<QTouchEvent *>(event); if (helper->touch(e)) e->accept(); QList<QTouchEvent::TouchPoint> pts = e->touchPoints(); if (pts.size() == 1) { QRectF r = pts.first().sceneRect(); r.moveCenter(r.center() - d->map->position()); } break; } case QEvent::TouchEnd: { QTouchEvent *e = static_cast<QTouchEvent *>(event); if (helper->touch(e)) e->accept(); QList<QTouchEvent::TouchPoint> pts = e->touchPoints(); if (pts.size() == 1) { QRectF r = pts.first().sceneRect(); r.moveCenter(r.center() - d->map->position()); } break; } case QEvent::TouchUpdate: { QTouchEvent *e = static_cast<QTouchEvent *>(event); if (helper->touch(e)) e->accept(); break; } default: return false; break; } // switch (event->type()) return true; }