Slide able Table View
This commit is contained in:
68
src/components/SlideableTableView.cpp
Normal file
68
src/components/SlideableTableView.cpp
Normal 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);
|
||||||
|
}
|
||||||
27
src/components/SlideableTableView.h
Normal file
27
src/components/SlideableTableView.h
Normal 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
|
||||||
Reference in New Issue
Block a user