实现触摸屏QT滚动区手指下滑自动滚动。只需要两个步骤。
1.继承带有滚动区的控件类的。如QScrollArea, QTableViwe, QTableWidget等
2.重载mouseMoveEvent和mouseMoveEvent,并在构造函数写上:
this->setMouseTracking(true);
即可。
具体如下:
头文件.h
#ifndef GZSCROLLAREA_H
#define GZSCROLLAREA_H
#include <QScrollArea>
class GZScrollArea : public QScrollArea
{
public:
explicit GZScrollArea(QWidget * parent = 0);
void setGZGeometry(int, int, int, int);
QWidget* getBody();
private:
QWidget *m_Body;
QPoint m_TempPoint;
protected:
void mouseMoveEvent(QMouseEvent*);
void mousePressEvent(QMouseEvent*);
};
#endif // GZSCROLLAREA_H
源文件.cpp
#include "gzscrollarea.h"
#include <QEvent>
#include <QDebug>
#include <QMouseEvent>
#include <QScrollBar>
GZScrollArea::GZScrollArea(QWidget *parent) :
QScrollArea(parent)
{
m_Body = new QWidget(this);
this->setWidget(m_Body);
//setAttribute(Qt::WA_Hover, true);
this->setMouseTracking(true);
}
void GZScrollArea::setGZGeometry(int x, int y, int w, int h)
{
this->setGeometry(x, y, w, h);
m_Body->setGeometry(0, 0, w, y);
}
QWidget* GZScrollArea::getBody()
{
return m_Body;
}
//记录起始位置
void GZScrollArea::mousePressEvent(QMouseEvent *event)
{
m_TempPoint = event->pos();
}
//滑动鼠标下位
void GZScrollArea::mouseMoveEvent(QMouseEvent *event)
{
auto pos = event->pos();
auto vbar = this->verticalScrollBar();
//向下滑动 向下滚动
//auto offset = pos->y() - m_TempPoint.y();
//向上滑动 向下滚动
auto offset = m_TempPoint.y() - pos.y();
//获取当前滚动条位置
auto val = vbar->value();
//获取滚动条pagetemp区域高度
auto step = vbar->pageStep();
//设计移动位置
auto move = offset * step / m_Body->height();
if(move + val < 0 || move + val > m_Body->height()) return;
//移动
vbar->setValue(move + val);
}
资源地址:https://download.csdn.net/download/linkang1024/12239306