void QQuickWheelArea::wheelEvent(QWheelEvent *we) { if (we->phase() == Qt::ScrollBegin) setActive(true); else if (we->phase() == Qt::ScrollEnd) setActive(false); QPoint numPixels = we->pixelDelta(); QPoint numDegrees = we->angleDelta() / 8; if (!numPixels.isNull()) { setHorizontalDelta(numPixels.x() * pixelDeltaAdjustment); setVerticalDelta(numPixels.y() * pixelDeltaAdjustment); } else if (!numDegrees.isNull()) { setHorizontalDelta(numDegrees.x() / 15.0 * m_scrollSpeed); setVerticalDelta(numDegrees.y() / 15.0 * m_scrollSpeed); } // This allows other parent WheelArea's to handle scrolling // For example this allows for ScrollView inside of another ScrollView to work correctly // Once this scrollbar can't scroll anymore, ie it reaches the limits, // it will ignore the scroll event so the parent WheelArea can start scrolling if ((numPixels.x() != 0 || numDegrees.x() != 0) && m_horizontalMinimumValue <= m_horizontalMaximumValue && (isAtXBeginning() || isAtXEnd())) { we->ignore(); } else if ((numPixels.y() != 0 || numDegrees.y() != 0) && m_verticalMinimumValue <= m_verticalMaximumValue && (isAtYBeginning() || isAtYEnd())) { we->ignore(); } else { we->accept(); } }
bool QWheelArea::event(QEvent *e) { switch (e->type()) { case QEvent::GraphicsSceneWheel: { QGraphicsSceneWheelEvent *we = static_cast<QGraphicsSceneWheelEvent *>(e); if (we->orientation() == Qt::Vertical) setVerticalDelta(we->delta()); else setHorizontalDelta(we->delta()); return true; } case QEvent::Wheel: { QWheelEvent *we = static_cast<QWheelEvent *>(e); if (we->orientation() == Qt::Vertical) setVerticalDelta(we->delta()); else setHorizontalDelta(we->delta()); return true; } default: break; } return QDeclarativeItem::event(e); }