如何在模型更改时停止ListView“跳跃”

2024-05-13

我需要做什么: 我需要创建一个聊天窗口用一个ListView在 QML 中存储聊天消息。我设置listView.positionViewAtEnd()以便跟踪最后的消息。我禁用positionViewAtEnd当我向上滚动时,我可以阅读过去的消息,而不必在每次收到新消息时跳到最后。

问题:每次向上滚动后我收到一条新消息,它会跳转在列表的开头。为了解决这个问题,我设法存储contentY列表并每次重置它onCountChanged处理程序被调用(见下面的代码):

ListView {
    id: messagesList
    model: contact? contact.messages: []
    delegate: delegate
    anchors.fill: parent
    anchors.bottomMargin: 20
    height: parent.height
    anchors.margins: 10

    property int currentContentY

    onMovementEnded: {
       currentContentY = contentY
    }

    onCountChanged: {
        contentY = currentContentY
    }
    onContentYChanged: {
        console.log(".....contentY: " + contentY)
    }
}   

问题是即使我设置了最后一个contentY在更改模型之前,我有列表仍然有点跳跃 (几个像素,不在结尾或开头)和它并不总是跳。当我转到列表顶部并打印contentY我得到负值。理论上,contentY在列表的开头应该是0.

有人能告诉我出了什么问题吗?或者也许建议另一种解决方案来创建我的消息列表?

比你提前! :)


一种可能的解决方案是将 ListView 插入 Flickable 并禁用交互的ListView 的标志

    Flickable {
        id: fparent
        anchors.fill: parent
        anchors.bottomMargin: 20
        anchors.margins: 10

        interactive: true
        clip: true
        flickableDirection: Flickable.VerticalFlick
        contentHeight: messagesList.height

        ListView {
            id: messagesList
            width: parent.width
            height: childrenRect.height
            clip: true
            model: contact? contact.messages: []
            delegate: delegate
            interactive: false
            onCountChanged: {
                fparents.returnToBounds();
            }
        }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在模型更改时停止ListView“跳跃” 的相关文章

随机推荐

  • Razor View Engine 是否适用于 Mono?

    我尝试搜索了一下 但没有找到答案 Razor View Engine 在 Mono 中工作吗 是的 它确实 我让它在 Linux 上与 mono 一起工作 You need mono 2 10 2 from the stable sourc
  • 如何剪切(1) 个驼峰字?

    Bash 中有没有一种简单的方法可以将驼峰式单词拆分为其组成词 例如 我想将 aCertainCamelCasedWord 拆分为 a certain Camel Cased Word 并能够选择我感兴趣的那些字段 当单词分隔符是下划线时
  • Android 闹钟应用程序在 Oreo 下因 NullPointerException 导致 SystemUI 崩溃(仅限)

    我有一个 Android 闹钟应用程序 我有通常的 警报意图 gt 接收器 gt 活动链 其最后一步创建一个全屏窗口并发出警报 所有这些在 Oreo API 26 之前的 Android 版本上都可以正常工作 但在 Oreo 上 当警报触发
  • R中的不定积分

    我正在计算方程的不定积分 我将加速度计的数据通过可视化 C 程序输入到 R 中 然后就可以很简单地得出一个方程来表示加速度曲线 这一切都很好 但是我还需要计算撞击速度 根据我在高中时代的理解 我的加速度曲线的不定积分将产生速度方程 我知道执
  • PDO::PARAM_FLOAT 不存在,为什么?

    我想知道为什么 PDO PARAM FLOAT 不存在以及什么可以替代它 没有 可能是由于隐含的舍入问题 只需使用PDO PARAM STR并使用将浮点数转换为字符串strval float or string float
  • Postgres 运行缓慢的删除查询

    我们有一个表 其行数刚刚超过 62k 我们正在对其运行一个非常简单的删除查询 需要 45 分钟才能完成 DELETE FROM myTable WHERE createdtime lt 2017 03 07 05 00 00 000 我们尝
  • 如何在 .js 中的字符串中插入来自 ruby​​ 示例的变量[重复]

    这个问题在这里已经有答案了 在 ruby 中 您可以将变量插入到字符串中 如下所示 x sake puts I like x I like sake 例如 def what i like word I like word end 在 jav
  • 关于C字符串的问题

    我是 C 语言新手 对 C 字符串非常困惑 以下是我的问题 从字符串中查找最后一个字符 如何找出字符串中的最后一个字符 我带着类似的东西来 char str hello printf c str strlen str 1 return 0
  • Docker 容器中的 LDAP 身份验证

    默认情况下 当Docker容器启动时 里面的用户是sudo I want 默认情况下将 sudo 用户锁定在容器中 在容器中使用 LDAP 身份验证而不是默认身份验证 当用户与映像一起提供时 或者在容器运行时由 sudo 用户创建 为此 我
  • ORDER BY id 或 date_created 显示最新结果?

    我有一个表 实际上有几个 我想首先从中获取最新条目的结果 这是我的ORDER BY条款选项 date created INT 从不改变值 id 当然是INT AUTO INCRMENT 两列应同等地代表记录插入的顺序 我自然会使用date
  • 为单个方法引用大 DLL

    我想在 C 中使用大型类库 dll 中的单个方法 是否有性能或其他方面的缺点 我应该使用反射工具 读取 方法代码并将其复制粘贴到我的项目中吗 更新 硬盘空间不是问题 我的应用程序是网络应用程序 是否有性能或其他方面的缺点 唯一真正重要的是可
  • 如何在WPF中使用一次性视图模型?

    如果视图模型引用非托管资源或具有事件处理程序 例如调度程序计时器上的处理已过去 如何确保视图模型得到正确处理 在第一种情况下 终结器是一种选择 虽然并不理想 但在后者中 它永远不会被调用 我们如何判断何时不再有视图附加到视图模型 我通过执行
  • 如何在控制器内部使用 auto_link

    在我的控制器中 我需要构建一个 JSON 对象 如何在控制器内使用 auto link 现在它错误 NoMethodError undefined method mail to for
  • Apollo 更新查询未调用?

    我正在 GitHunt React 和 GitHunt API 中研究 Apollo pub sub 当我运行这些应用程序并输入新评论时 评论将通过调用提交来保存 然后 updateQueries 代码块在此处运行 const Commen
  • 具有自签名证书的 Alamofire / ServerTrustPolicy

    我想使用 Alamofire 通过带有自签名证书的 https 连接与我的服务器进行通信 我的环境在本地主机上运行 我尝试连接 但响应始终如下所示 Success false Response String nil 我用下面的代码完成了它
  • 如何在 Linq where 子句中指定动态字段名称?

    如果您创建一个包含 Linq 条件的 Filter 对象 该对象通常位于如下的 where 子句中 var myFilterObject FilterFactory GetBlank myFilterObject AddCondition
  • 如何使用 QuerySelector 获得第二个匹配项?

    以下语句给出了该类的第一个元素titanic element document querySelector titanic 我如何检索具有相同类的第二个元素 Use document querySelectorAll https devel
  • 我想使用对话框显示两个数字选择器

    我试图仅使用 java 在对话框上显示两个数字选择器 代码正在工作 但我无法将其排列为相等的宽度 这是我的代码 RelativeLayout relative new RelativeLayout mContext final Number
  • Fiddler 会话对象文档

    在哪里可以找到有关 Fiddler Session 对象的属性和方法的文档 我正在 Fiddler 中创建一些自定义规则 js 以进行故障排除 安装脚本编辑器并单击 视图 gt 类资源管理器 http www telerik com dow
  • 如何在模型更改时停止ListView“跳跃”

    我需要做什么 我需要创建一个聊天窗口用一个ListView在 QML 中存储聊天消息 我设置listView positionViewAtEnd 以便跟踪最后的消息 我禁用positionViewAtEnd当我向上滚动时 我可以阅读过去的消