62 lines
1.3 KiB
C++
62 lines
1.3 KiB
C++
#include "SlideWidget.h"
|
|
#include <QScrollBar>
|
|
#include <QMouseEvent>
|
|
#include <QApplication>
|
|
#include <qdebug.h>
|
|
|
|
|
|
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;
|
|
}
|