首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有可拖放项的QML ListView中的延迟滚动

具有可拖放项的QML ListView中的延迟滚动
EN

Stack Overflow用户
提问于 2021-06-23 00:30:43
回答 1查看 345关注 0票数 0

不久前,通过以下教程实现了具有可拖放项的ListViewhttps://doc.qt.io/qt-5/qml-dynamicview-tutorial.html,因此ListView items委托是MouseArea

拖动工作正常,但是滚动在触摸屏(Linux或Android平板电脑)上有一些小故障:滚动是在2-3秒的手指移动后开始的,而不是立即开始的。很烦人!尝试了不同的ListViewFlickable属性,但没有成功。有任何解决方案或解决办法吗?

鼠标滚轮或笔记本电脑触控板滚动工作良好-立即滚动,手指-小故障。是编程错误、性能问题还是Qt问题/ bug?

这个答案给了我一些更改cacheBuffer属性的技巧,为了避免绑定循环,我在之前延迟了这些技巧:

代码语言:javascript
运行
复制
    Binding on cacheBuffer {
        value: Math.max((listView.contentItem.height + listView.spacing) *
                        listView.count - listView.height, 0)
        delayed: true   // Prevent intermediary values from being assigned
    }

删除延迟属性和修复绑定循环使滚动响应更快,但在开始滚动之前仍有2-3秒的延迟:

代码语言:javascript
运行
复制
    cacheBuffer: count > 0 ? (contentItem.height + spacing) * count
                           : itemHeight

所以我滚动了一次-没有反应。2-3秒过去了,滚动第二次-工作正常。接下来去哪挖?有什么想法吗?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-25 01:06:50

我读过一些滚动性能技巧:

得出了一些结论。

1.沉重的装订

并删除一些可能降低性能的绑定和属性。其中之一是

代码语言:javascript
运行
复制
property real contentHeight: listView.contentHeight

属性在列表项委托及其on..Change信号处理程序中。在其他处理程序中也进行了一些优化。

2.固定cacheBuffer属性值在ListView

通过一些测试,得出具有动态特性的结论,它可能会导致缓存项的出现,导致性能的下降,而由于项目的清理和消失,会导致一些不必要的副作用。即:

代码语言:javascript
运行
复制
    cacheBuffer: 4096

3.可拖放MouseArea中不必要的属性

比较我的MouseArea (dragArea)结构和属性的实现与Qt示例原点,发现它没有propagateComposedEvents属性-删除它和瞧-所有工作都很好!!

这个属性似乎对用手指在触摸屏上滚动产生了不必要的副作用,就像列表用鼠标轮或膝上型电脑的触控板快速地滚动一样。

4.将ListView转换为Flickable

为了完全消除缓存,还可以将ListView转换为Flickable,并在Column中使用Repeater

代码语言:javascript
运行
复制
  Flickable {
    Column {
        Repeater {
            model: myItems

            delegate: listItem { }
        }
     }
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68092135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档