gpt4 book ai didi

multithreading - QT:QFileSystemModel _q_fileSystemChanged 插槽在 UI 线程上执行,这与文档相矛盾

转载 作者:行者123 更新时间:2023-12-04 06:41:11 25 4
gpt4 key购买 nike

我的用户界面使用 QTreeView 和 QFileSystemModel 来选择文件夹和文件。 QFileSystemModel 的文档说文件结构更新是在一个单独的线程上完成的,这意味着 UI 不会被阻塞。但是,对我来说情况并非如此,我无法弄清楚差异以及其他人如何没有遇到此问题。调试后,我注意到占用大部分时间的 QFileSystemModel _q_fileSystemChanged 插槽仍然在主 UI 线程上执行,这是有道理的。问题是文档如何声明它不会阻止 UI。有解决办法吗?我误解了什么吗?

复制
- 使用 QFileSystemDataModel 创建 QTreeView
- 将根路径设置为“”或“/”
- 在 QFileSystemModel _q_fileSystemChanged 槽中设置断点
- 应用加载后展开驱动器之一

问题:
- 在 UI 线程上调用该插槽,从而阻止应用程序直到它完成。

有一些方法可以使文件解析器更快,但我确实需要在单独的线程上执行并在数据填充并准备好 QTreeView 时通知。

谢谢,
清白

最佳答案

我认为这可能是图标的原因。内_q_fileSystemChanged()插槽 fileInfoGatherer.getInfo()被调用 - 除其他外 - 解析路径的图标。在当前设计中 QFileIconProvider用途 QIcon代表图标和QIcon只能在 UI 线程中使用。 QImage似乎是唯一允许在其他线程中使用的类,但我认为使用 QImage 可能会很昂贵在后台线程中并将其转换为 QIcon在 UI 线程中。

所以有可能是QFileIconProvider的平台实现在某些情况下,网络路径很慢,因此会减慢 UI 主线程的速度。

我不知道这是否是您问题的根源,但至少这应该是 _q_fileSystemChanged() 的原因。在 UI 线程中调用。

关于multithreading - QT:QFileSystemModel _q_fileSystemChanged 插槽在 UI 线程上执行,这与文档相矛盾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4055726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com