[英]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)時,它凍結了幾秒鍾。 顯然,圖標正在減慢加載速度,但是如果模型使用單獨的線程,為什么凍結?
問題:
我怎樣才能告訴模型我真的要使用單獨的線程,還是不想等待另一個線程?
AFAIK,QFileSystemModel始終使用單獨的線程。 在我看來,您的視圖正在鎖定系統,而它會檢索整個文件列表並在添加每個項目時重置布局。 帖子有點舊,但是他們在這里談論您的問題有點。
如果使用QListView,是否有相同的延遲? 如果使用QListView而不是QTreeView,則可以使用QListView :: setLayoutMode()將其設置為以批處理模式運行。
如果必須具有QTreeView,則可以考慮將其子類化,並使用QAbstractItemView :: scheduleDelayedItemsLayout()一次性布局所有內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.