From d898a2b57ff5869e4606d13f05bc18a5ecddfa19 Mon Sep 17 00:00:00 2001 From: Krad Date: Tue, 23 Nov 2021 16:52:54 +0800 Subject: [PATCH] Slide able Table View --- src/components/SlideableTableView.cpp | 68 +++++++++++++++++++++++++++ src/components/SlideableTableView.h | 27 +++++++++++ 2 files changed, 95 insertions(+) create mode 100644 src/components/SlideableTableView.cpp create mode 100644 src/components/SlideableTableView.h diff --git a/src/components/SlideableTableView.cpp b/src/components/SlideableTableView.cpp new file mode 100644 index 0000000..8423fb9 --- /dev/null +++ b/src/components/SlideableTableView.cpp @@ -0,0 +1,68 @@ +// +// Created by Krad on 2021/11/23. +// + +#include "SlideableTableView.h" +#include +#include +#include + +SlideableTableView::SlideableTableView(QWidget *parent) : QTableView(parent) { + +} + +SlideableTableView::~SlideableTableView() { + +} + +void SlideableTableView::mousePressEvent(QMouseEvent *ev) { + isDragging = true; + ox = ev->pos().x(); + oy = ev->pos().y(); + ov = this->verticalScrollBar()->value(); + QTableView::mousePressEvent(ev); +} + +void SlideableTableView::mouseMoveEvent(QMouseEvent *ev) { + if (!isDragging) + { + QTableView::mouseMoveEvent(ev); + return; + } else{ + if (this->verticalScrollBar()->isVisible()) + { + int nv = (int)round(((double)ov*30.0+((double)(oy-ev->pos().y())))/30.0); + int max = this->verticalScrollBar()->maximum(); + int min = this->verticalScrollBar()->minimum(); + printf("max:%d, min:%d, nv:%d\r\n", max, min, nv); + nv = nv>max?max:(nvverticalScrollBar()->setValue(nv); + } +// if (this->verticalScrollBar()->isVisible()) +// { +// this->verticalScrollBar()->setPageStep(this->viewport()->height()); +// this->verticalScrollBar()->setRange(0,this->height()); +// int nv =this->verticalScrollBar()->value()+(oy-ev->pos().y()); +// int max = this->verticalScrollBar()->maximum(); +// int min = this->verticalScrollBar()->minimum(); +// printf("max:%d, min:%d, nv:%d\r\n", max, min, nv); +// nv = nv>max?max:(nvverticalScrollBar()->setValue(nv); +// return; +// } + } + QTableView::mouseMoveEvent(ev); +} + +void SlideableTableView::mouseReleaseEvent(QMouseEvent *ev) { + if (!isDragging) + { + isDragging = false; + } + if (this->verticalScrollBar()->isVisible()) + { + QApplication::sendEvent(this->verticalScrollBar(),ev); + } + QTableView::mouseReleaseEvent(ev); +} diff --git a/src/components/SlideableTableView.h b/src/components/SlideableTableView.h new file mode 100644 index 0000000..212f17c --- /dev/null +++ b/src/components/SlideableTableView.h @@ -0,0 +1,27 @@ +// +// Created by Krad on 2021/11/23. +// + +#ifndef GUI_SLIDEABLETABLEVIEW_H +#define GUI_SLIDEABLETABLEVIEW_H + +#include +class SlideableTableView:public QTableView { +Q_OBJECT +public: + explicit SlideableTableView(QWidget *parent = nullptr); + ~SlideableTableView(); + +protected: + void mousePressEvent(QMouseEvent *ev) override ; + void mouseMoveEvent(QMouseEvent *ev) override ; + void mouseReleaseEvent(QMouseEvent *ev) override ; + +private: + bool isDragging = false; + int ox,oy,ov; + +}; + + +#endif //GUI_SLIDEABLETABLEVIEW_H