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