资源简介

实现触摸屏QT滚动区手指下滑自动滚动。qt版本5.5.1。需继承带有滚动区域的原生QT类,重载mousePressEvent,mouseMoveEvent。并开启 setMouseTracking(true)。

资源截图

代码片段和文件信息

#include “gzscrollarea.h“
#include 
#include 
#include 
#include 

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);
}


评论

共有 条评论