QT 触摸屏下滑滚动

实现触摸屏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

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值