QFileSystemModel freezes UI
QFileSystemModel freezes UI
我正在使用Qt 4.8,并试图创建一个GUI显示一个或多个目录树。我在一个文档中读到,QFileSystemModel
使用单独的线程。我试过了:
QFileSystemModel *model = new QFileSystemModel;
model->setRootPath("C:/");
connect(model, SIGNAL(directoryLoaded(QString)), this, SLOT(alertLoaded(QString)));
ui->treeViewFolders->setModel(model);
此处alertLoaded
仅在加载目录时显示消息对话框。因此,如果我有权利,当我试图在树中打开一个新的目录分支时,那么它必须在后台加载目录的项目,以便UI在此过程中不会冻结。
但问题是,它似乎不是这样做的。当我试图打开一个包含1000个或更多文件的目录(例如system32)时,它会冻结几秒钟。显然,图标减慢了加载速度,但如果模型使用的是单独的线程,为什么会冻结?
:
我如何告诉模型,我真的想使用一个单独的线程,或者我不想等待另一个线程?
当然,QFileSystemModel总是使用一个单独的线程。在我看来,您的视图在检索整个文件列表并在添加每个项目时重置布局时锁定了系统。这篇文章有点老了,但他们在这里讨论了你的问题。
如果你使用QListView,你有同样的延迟吗?如果你使用QListView而不是QTreeView,你可以使用QListView::setLayoutMode()设置它以批处理模式运行。
如果你必须有一个QTreeView,你可以考虑子类化它,并使用QAbstractItemView::scheduleDelayedItemsLayout()来一次布局一切
相关文章:
- 如何在MS Visual Studio 2019中运行QT UI
- 如何处理使用.ui文件生成的.h文件
- 根据变量使Qt UI中的复选框为已选中/未选中
- 一旦双簧管录制开始,主 UI 线程就会被阻止
- Qt Quick,如何更改 Ui 源代码?
- QWidget UI 在使用 QQuickWidget 时冻结
- 在 3ds Max 中更新进度条后,环境和效果 UI 不刷新
- Qt - QQuickWidget setSource without freezing UI
- MFC/C++ ComboBox:禁用下拉列表关闭和打开(UI 冻结)的绘制
- Qt5 ui,多个窗口:如何从窗口 1 访问窗口 2 中的 UI 对象
- QtConcurrent - 在发布到 UI 线程的数千个结果中保持 GUI 响应
- 发出信号以从线程更新 UI
- 更好的文本UI调试C++器,如python的pudb
- 可以在JSON文件的帮助下在Qt中创建UI表单
- 在 ui 文件中隐藏 QTabWidget 中的单个选项卡窗格?
- 由于多个 *.ui 文件而导致的多个Ui_Dialog定义?
- 如何将 .ui 完全转换为 C++ 头文件和源文件
- CMake + Qt,moc 编译失败,无法实现 QMetaObject 方法(编译器找不到基本 ui 对象的标头?
- 如何创建一个接口,允许我访问C++中的按钮(和其他ui)函数,该函数是使用python中的MFC实现的
- QFileSystemModel freezes UI