首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QFileSystemModel冻结UI

QFileSystemModel冻结UI
EN

Stack Overflow用户
提问于 2013-03-27 14:42:10
回答 1查看 596关注 0票数 0

我正在使用QT4.8并尝试创建一个GUI,显示一个或多个目录树。我在文档中看到QFileSystemModel使用单独的线程。我试过这个:

代码语言:javascript
复制
QFileSystemModel *model = new QFileSystemModel;
model->setRootPath("C:/");
connect(model, SIGNAL(directoryLoaded(QString)), this, SLOT(alertLoaded(QString)));
ui->treeViewFolders->setModel(model);

在这里,alertLoaded只显示加载目录时的消息对话框。因此,如果我正确的话,当我试图在树中打开一个新的目录分支时,它必须在后台加载目录的项,这样,UI就不会在处理过程中冻结。

但问题是它似乎不是这样的。当我试图打开一个包含1000个或更多文件(例如system32)的目录时,它会冻结几秒钟。很明显,图标正在减缓加载速度,但是如果模型使用的是单独的线程,为什么会冻结呢?

问题:

我如何告诉模型,我真的想使用一个单独的线程,或者我不想等待另一个线程?

EN

回答 1

Stack Overflow用户

发布于 2013-03-27 16:29:05

QFileSystemModel总是使用一个单独的线程。在我看来,您的视图正在锁定系统,同时检索整个文件列表,并在添加每个项时重置布局。这篇文章有点旧,但他们谈论你的问题有点这里

如果使用QListView,是否有相同的延迟?如果使用QListView而不是QTreeView,则可以将其设置为以批处理模式与QListView::setLayoutMode()一起运行。

如果您必须拥有一个QTreeView,您可以考虑对它进行子类化,并使用QAbstractItemView::scheduleDelayedItemsLayout()一次性地布局所有内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15661696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档