- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的用户界面使用 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/
我的用户界面使用 QTreeView 和 QFileSystemModel 来选择文件夹和文件。 QFileSystemModel 的文档说文件结构更新是在一个单独的线程上完成的,这意味着 UI 不会
我是一名优秀的程序员,十分优秀!