簡體   English   中英

QFileSystemModel凍結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)時,它凍結了幾秒鍾。 顯然,圖標正在減慢加載速度,但是如果模型使用單獨的線程,為什么凍結?

問題:

我怎樣才能告訴模型我真的要使用單獨的線程,還是不想等待另一個線程?

AFAIK,QFileSystemModel始終使用單獨的線程。 在我看來,您的視圖正在鎖定系統,而它會檢索整個文件列表並在添加每個項目時重置布局。 帖子有點舊,但是他們在這里談論您的問題有點。

如果使用QListView,是否有相同的延遲? 如果使用QListView而不是QTreeView,則可以使用QListView :: setLayoutMode()將其設置為以批處理模式運行。

如果必須具有QTreeView,則可以考慮將其子類化,並使用QAbstractItemView :: scheduleDelayedItemsLayout()一次性布局所有內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM