AbstractScrollArea::AbstractScrollArea(QGraphicsWidget *parent) : GvbWidget(parent) , m_viewport(0) , m_horizontalScrollBar(0) , m_verticalScrollBar(0) , m_prevHorizontalValue(0.0) , m_prevVerticalValue(0.0) { setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); setContentsMargins(0, 0, 0, 0); m_horizontalScrollBar = new ScrollBar(Qt::Horizontal, this); m_horizontalScrollBar->hide(); m_horizontalScrollBar->setContentsMargins(0, 0, 0, 0); m_horizontalScrollBarPolicy = Qt::ScrollBarAsNeeded; m_horizontalScrollBar->setZValue(zValue()+1); // Raise scroll bar to top m_horizontalScrollBar->setVisible(false); connect(m_horizontalScrollBar, SIGNAL(sliderPositionChange(qreal)), this, SLOT(horizontalScroll(qreal))); connect(m_horizontalScrollBar, SIGNAL(sliderPressed()), this, SLOT(horizontalScrollStart())); m_verticalScrollBar = new ScrollBar(Qt::Vertical, this); m_verticalScrollBar->hide(); m_verticalScrollBar->setContentsMargins(0, 0, 0, 0); m_verticalScrollBarPolicy = Qt::ScrollBarAsNeeded; m_verticalScrollBar->setZValue(zValue()+1); // Raise scroll bar to top m_verticalScrollBar->setVisible(false); connect(m_verticalScrollBar, SIGNAL(sliderPositionChange(qreal)), this, SLOT(verticalScroll(qreal))); connect(m_verticalScrollBar, SIGNAL(sliderPressed()), this, SLOT(verticalScrollStart())); QGraphicsWidget *viewport = new QGraphicsWidget; setViewport(viewport); }
//--------------------------------------------------------- // wheelEvent //--------------------------------------------------------- void WaveView::wheelEvent(QWheelEvent* ev) { int keyState = ev->modifiers(); bool shift = keyState & Qt::ShiftModifier; bool ctrl = keyState & Qt::ControlModifier; if (shift) { // scroll vertically int delta = -ev->delta() / WHEEL_DELTA; int xpixelscale = 5*MusECore::fast_log10(rmapxDev(1)); if (xpixelscale <= 0) xpixelscale = 1; int scrollstep = WHEEL_STEPSIZE * (delta); ///if (ev->state() == Qt::ShiftModifier) // if (((QInputEvent*)ev)->modifiers() == Qt::ShiftModifier) scrollstep = scrollstep / 10; int newXpos = xpos + xpixelscale * scrollstep; if (newXpos < 0) newXpos = 0; //setYPos(newYpos); emit horizontalScroll((unsigned)newXpos); } else if (ctrl) { // zoom horizontally if (ev->delta()>0) emit horizontalZoomIn(); else emit horizontalZoomOut(); } else { // scroll horizontally emit mouseWheelMoved(ev->delta() / 10); } }