滚动时我的列表视图中的这些故障是啥?
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 正在缩小?