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);
相关推荐
远离UE46 小时前
UE5 compute shader 原子加
开发语言·c++·ue5
C+-C资深大佬6 小时前
C++ 显式类型转换详解:static_cast、dynamic_cast、const_cast、reinterpret_cast
开发语言·c++
KaMeidebaby6 小时前
卡梅德生物技术快报|抗体亲和力成熟工业化调控新机制:差异性浆细胞增殖工艺优化思路
java·开发语言·人工智能·算法·机器学习·架构·spark
luj_17687 小时前
心形曲线轨迹控制三大关键技术
c语言·开发语言·c++·经验分享·算法
Mininglamp_27188 小时前
Claude Code 封禁中国开发者之后:本地 AI 编程工具的替代方案实测
开发语言·人工智能·windows·开源软件·ai-native
思麟呀8 小时前
C++17(三)if constexpr+折叠表达式
开发语言·c++
醉城夜风~8 小时前
Java详解经典算法题:接雨水(三种实现方案+原理剖析)
java·开发语言·算法
qydz118 小时前
杰理开发基础知识(3)
开发语言·嵌入式开发·杰理科技
贾斯汀frank8 小时前
C# 15 类型系统改进:Union Types
开发语言·windows·c#
阿里嘎多学长8 小时前
2026-07-10 GitHub 热点项目精选
开发语言·程序员·github·代码托管