Add slide widget
This commit is contained in:
61
src/components/SlideWidget.cpp
Normal file
61
src/components/SlideWidget.cpp
Normal file
@@ -0,0 +1,61 @@
|
||||
#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;
|
||||
}
|
||||
23
src/components/SlideWidget.h
Normal file
23
src/components/SlideWidget.h
Normal file
@@ -0,0 +1,23 @@
|
||||
#ifndef GUI_SLIDEWIDGET_H
|
||||
#define GUI_SLIDEWIDGET_H
|
||||
|
||||
#include <QWidget>
|
||||
class QScrollBar;
|
||||
class SlideWidget: public QWidget {
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit SlideWidget(QWidget *parent = nullptr);
|
||||
~SlideWidget() override;
|
||||
void setVerticalScrollBar(QScrollBar* bar);
|
||||
protected:
|
||||
void mousePressEvent(QMouseEvent *ev) override ;
|
||||
void mouseMoveEvent(QMouseEvent *ev) override ;
|
||||
void mouseReleaseEvent(QMouseEvent *ev) override ;
|
||||
QScrollBar* verticalScrollBar();
|
||||
private:
|
||||
bool mIsDragging;
|
||||
int mdirect = 0;
|
||||
int mOriginPosY,mOriginScrollBarV;
|
||||
QScrollBar* mVerticalScrollBar;
|
||||
};
|
||||
#endif //GUI_SLIDEWIDGET_H
|
||||
Reference in New Issue
Block a user