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