Qt惯性动画效果

QScrollArea中自定义滚动效果

复制代码
  ui->scrollArea->viewport();
    // 开启触摸支持(车载触摸屏必开)
     ui->scrollArea->setAttribute(Qt::WA_AcceptTouchEvents, true);
    // ui->scrollArea->grabGesture();
     // 错误的做法:对 QScrollArea 整体进行手势抓取
     // QScroller::grabGesture(scrollArea, QScroller::TouchGesture);

     // 正确的做法:对 QScrollArea 的视口(Viewport)进行手势抓取
     // 这会确保滚动应用于内部的内容
     QScroller::grabGesture(ui->scrollArea->viewport(), QScroller::TouchGesture);

     QScroller::grabGesture(ui->scrollArea->viewport(), QScroller::LeftMouseButtonGesture);

     // 使用 QScroller::scroller() 获取并设置属性
      QScroller *scroller = QScroller::scroller(ui->scrollArea->viewport());
     // 如果你想关闭内容拖拽到边界外的"弹性/回弹"效果,可以设置 OvershootPolicy
     QScrollerProperties properties = scroller->scrollerProperties();
     properties.setScrollMetric(QScrollerProperties::VerticalOvershootPolicy,
                                QVariant::fromValue(QScrollerProperties::OvershootAlwaysOn));
     properties.setScrollMetric(QScrollerProperties::HorizontalOvershootPolicy,
                                QVariant::fromValue(QScrollerProperties::OvershootAlwaysOff));

     // ========== 车载HMI适配:调整回弹手感(关键属性)==========
\
     // properties.setScrollMetric(QScrollerProperties::Friction, 0.8); // 滚动摩擦力(0.8~1.0,跟手不卡顿)
     properties.setScrollMetric(QScrollerProperties::MaximumVelocity, 1200); // 最大滚动速度(适配车载触摸屏)
     properties.setScrollMetric(QScrollerProperties::OvershootScrollTime, 0.3);             // 回弹时长300ms
     properties.setScrollMetric(QScrollerProperties::OvershootDragResistanceFactor, 0.3);    // 核心:回弹软硬度(越小越软,车载推荐0.1~0.2)
     properties.setScrollMetric(QScrollerProperties::OvershootDragDistanceFactor, 0.15);    // 超界拖动幅度  超界拖动距离(车载推荐0.1~0.2)
     properties.setScrollMetric(QScrollerProperties::OvershootScrollDistanceFactor, 0.2);   // 回弹距离 回弹滚动距离(车载推荐0.2)
     properties.setScrollMetric(QScrollerProperties::OvershootScrollTime, 0.6);             // 回弹时长600ms

     // ========== 滚动摩擦力/速度(对应QML friction)==========
     properties.setScrollMetric(QScrollerProperties::DecelerationFactor, 0.15);             // 等效friction=0.8
     properties.setScrollMetric(QScrollerProperties::MaximumVelocity, 1.2);                 // 最大滚动速度1.2m/s  最大滚动速度(适配车载触摸屏)
     properties.setScrollMetric(QScrollerProperties::MinimumVelocity, 0.01);                // 最小滚动速度
     properties.setScrollMetric(QScrollerProperties::MaximumClickThroughVelocity, 0.5);     // 点击穿透阈值

     // ========== 手势触发配置(车载适配)==========
     properties.setScrollMetric(QScrollerProperties::DragStartDistance, 0.005);             // 5px触发滚动
     properties.setScrollMetric(QScrollerProperties::MousePressEventDelay, 0.0);            // 触摸屏无延迟
     properties.setScrollMetric(QScrollerProperties::DragVelocitySmoothingFactor, 0.8);     // 速度平滑

     // ========== 其他优化(车载必配)==========
     properties.setScrollMetric(QScrollerProperties::ScrollingCurve, QEasingCurve::OutCubic); // 平滑滚动曲线
     properties.setScrollMetric(QScrollerProperties::FrameRate, QScrollerProperties::Fps60); // 60fps

     scroller->setScrollerProperties(properties);
相关推荐
微学AI6 小时前
一根针指向所有方向:挂谷猜想对 LLM Agent 技能-记忆架构的启示
开发语言·人工智能·架构·挂谷猜想
豆瓣鸡7 小时前
算法日记 - Day3
java·开发语言·算法
韭菜炒鸡肝天8 小时前
VTK开发笔记(一):VTK介绍,Qt..+VSx+VTK.编译
开发语言·笔记·qt
Aaron - Wistron8 小时前
Web API C# (Furion版)带 单元测试
开发语言·后端·c#
刀法孜然9 小时前
QT5.12.8开发中使用触摸屏,配置的环境变量,imx6ullpro开发板qt开发
qt
Dxy12393102169 小时前
Python项目打包成EXE完整教程(PyInstaller实战避坑)
开发语言·python
05664610 小时前
Python康复训练——常用标准库
开发语言·python·学习
骊城英雄10 小时前
基于C#+avalonia ui实现的跨平台点胶机灌胶监控控制上位机软件
开发语言·ui·c#
吾儿良辰10 小时前
一个被BCL遗忘的高性能集合:C# CircularBuffer<T>深度解析
开发语言·windows·c#
昆曲之源_娄江河畔10 小时前
Python如何安装flask, pymssql
开发语言·python·flask·pymssql