滚动时我的列表视图中的这些故障是啥?

Posted

技术标签:

【中文标题】滚动时我的列表视图中的这些故障是啥?【英文标题】:What are these glitches in my listview when scrolling?滚动时我的列表视图中的这些故障是什么? 【发布时间】:2021-07-22 16:06:46 【问题描述】:

我正在用 QT for Python 编写一个文件转换软件,您可以在其中将文件拖到软件中,单击转换按钮,然后拖出输出文件。当用户将文件拖入软件时,所有文件的名称都会添加到一个ListView中。

当用户将文件拖入 ListView 时,它会调用 backend.addToPaths(url) 函数以及拖入其中的每个文件路径。然后,此函数将所有文件路径附加到文件路径的内部列表中,然后更新列表视图,使用所有文件名调用 main.qml 文件中的 updateList (paths) 函数,这会清除列表视图,然后附加回来所有的文件名,旧的和新的都拖进来了。

所有文件名都正确添加到列表视图中,但是当我在列表视图内部滚动时,它会产生这些非常奇怪的渲染错误,as shown in this video,或者在这些图像中:

图片1:

图 2:

图 3:

起初我认为这可能是由于剪辑造成的,所以我删除了它,但没有任何改变。然后我尝试增加列表视图的显示边距,然后是它的缓存缓冲区,但它仍然没有帮助。我也尝试将 pixelAligned 设置为 true,但这仍然不起作用。我猜这可能是因为 QT 不太擅长处理更新或更改的列表模型,但我真的不知道。

如果需要,这是我的main.qml 文件的简化版本:

ListView 
    id: inputFileView
    // @disable-check M16
    objectName: "inputFileView"
    clip: true
    boundsBehavior: Flickable.StopAtBounds
    flickableDirection: Flickable.VerticalFlick
    displayMarginBeginning: 100
    displayMarginEnd: 100

    function updateList(paths) 
        console.log("updating list");
        inputFileModel.clear();
        paths.forEach( function (item) 
            inputFileModel.append(
                'name': item
            );
        );
    

    model: ListModel 
        id: inputFileModel
    
    delegate: Item 
        Row 
            id: row1
            Text 
                text: name
            
        
    

    DropArea 
        anchors.fill: parent
        onDropped: 
            drop.urls.forEach( function (url) 
                backend.addToPaths(url)
            );
        
    

【问题讨论】:

当涉及到线程时,我会看到这样的事情。您是否在 Python 端的主线程之外做任何事情?如果是这样,问题很可能会再次出现。 我目前不是,但在执行 ffmpeg 和 imagemagick 任务以进行文件转换时,我可能需要这样做,尽管我不需要更改该线程中的 gui 或 qml 中的任何内容,所以我觉得没问题 请提供minimal reproducible example。 看起来像图形驱动程序问题。请将QSG_INFO 环境变量设置为1 运行,并将输出包含在您的问题中。还有你的 Qt 版本。 @musicamante 我尽量简化我的代码,只是我不知道是什么导致了问题,所以我给出了我认为有可能导致问题,就像它可能与 flickable 有关,或者可能向列表视图添加新元素;我也只是想解释一下我的项目是什么以及后端发生了什么 【参考方案1】:

我猜这是 PySide2 的错误?我注意到有人用 PySide2 标记替换了 Pyside 标记,我什至没有显示可以澄清我正在使用该版本的 python 代码,所以我想知道这是否意味着问题仅在 PySide2 中,所以我从那个切换到 PySide6,它工作了。我不知道是什么原因造成的,但我想现在已经好了。

【讨论】:

对不起,这个答案并不是很有用,因为我们不知道是什么导致了问题。 如果它是一个错误,重要的是我们要了解该错误的来源,以便可以提交和解决它,从而在此过程中帮助其他人。 我应该将其添加为评论吗? 嗯,评论可能更合适,但它已经在这里了。如果没有人为此举旗,你可以离开它。请考虑这个以供将来参考。

以上是关于滚动时我的列表视图中的这些故障是啥?的主要内容,如果未能解决你的问题,请参考以下文章

为啥当我滚动我的 tabelview 单元格时我的 imageview 正在缩小?

表格视图中的慢速/口吃滚动

表格视图中的这个空白区域是啥?

如何记住表格视图中的确切滚动位置

点击 Selenium + Python 无法滚动到视图中的链接的方式是啥?

自定义滚动谷歌颤动中的水平列表视图