Add slide widget

This commit is contained in:
kradchen
2023-09-07 17:29:49 +08:00
parent d6f5b42f4d
commit 19a7b10659
2 changed files with 84 additions and 0 deletions

View 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;
}

View 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