#include "SlideWidget.h" #include #include #include #include SlideWidget::SlideWidget(QWidget* parent): QWidget(parent) , mIsDragging(false) , mOriginPosY(-1) , mOriginScrollBarV(0) { } SlideWidget::~SlideWidget() { } void SlideWidget::setVerticalScrollBar(QScrollBar* bar) { if (!bar) return; mVerticalScrollBar = bar; } void SlideWidget::mousePressEvent(QMouseEvent* ev) { mIsDragging = true; mOriginPosY = ev->globalPos().y(); mOriginScrollBarV = this->verticalScrollBar()->value(); QWidget::mousePressEvent(ev); } void SlideWidget::mouseMoveEvent(QMouseEvent* ev) { if (!mIsDragging) { QWidget::mouseMoveEvent(ev); return; } if (this->verticalScrollBar()->isVisible()) { int offset = mOriginPosY - ev->globalPos().y(); int nv = offset+mOriginScrollBarV; int max = this->verticalScrollBar()->maximum(); int min = this->verticalScrollBar()->minimum(); nv = nv > max ? max : (nv < min ? min : nv); this->verticalScrollBar()->setValue(nv); } QWidget::mouseMoveEvent(ev); } void SlideWidget::mouseReleaseEvent(QMouseEvent* ev) { if (!mIsDragging)mIsDragging = false; QWidget::mouseReleaseEvent(ev); } QScrollBar* SlideWidget::verticalScrollBar() { return mVerticalScrollBar; }