Slide able Table View

This commit is contained in:
Krad
2021-11-23 16:52:54 +08:00
parent 71a95f40ce
commit d898a2b57f
2 changed files with 95 additions and 0 deletions

View File

@@ -0,0 +1,68 @@
//
// Created by Krad on 2021/11/23.
//
#include "SlideableTableView.h"
#include <QScrollBar>
#include <QMouseEvent>
#include <QApplication>
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:(nv<min?min:nv);
this->verticalScrollBar()->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:(nv<min?min:nv);
//
//// this->verticalScrollBar()->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);
}

View File

@@ -0,0 +1,27 @@
//
// Created by Krad on 2021/11/23.
//
#ifndef GUI_SLIDEABLETABLEVIEW_H
#define GUI_SLIDEABLETABLEVIEW_H
#include <QTableView>
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