[英]Files in QFileSystemModel are grey
我正在使用以下過濾器設置QFileSystemModel:
QDir::Filters( Dirs|AllDirs|Files|Drives|NoDotAndDotDot|AllEntries )
在代理模型中,我使用正則表達式按名稱過濾文件:
proxy_model_->setFilterRegExp(".*\\.(cpp$|cxx$|c$|hpp$|h$)");
....然后在我的model_
是QFileSystemModel的地方,我有一行:
model_->setNameFilters(QStringList(proxy->filterRegExp().pattern()));
...顯示的文件顯示為灰色。 為什么以及如何使它們“正常”。
實際上,不同Qt類之間的格式不一致。 如果他們使用單個QString,則就像@HostileFork所說。 但是,在這種情況下,函數setNameFilters()需要一個QStringList,這意味着您需要:
fileModel->setNameFilters({"*.cpp", "*.cxx", "*.c", "*.hpp", "*.h"});
由於您輸入的格式錯誤(正則表達式,而不是Window的通配符),因此所有內容都被標記為“將其過濾掉”,因為沒有匹配的語法怪異。
為什么變灰了? 因為默認情況下QFileSystemModel禁用/篩選出被過濾掉的文件(bwah?),而不是隱藏它們。 可以通過調用來更改:
fileModel->setNameFilterDisables(false);
QFileSystemModel使用的“名稱過濾器”沒有得到很好的記錄。 但是我將假定它們的格式可能與QFileDialog在其setNameFilter(s)中使用的格式相同:
http://doc.qt.nokia.com/stable/qfiledialog.html#setNameFilter
如果是這樣,則這些不是正則表達式。 它們是文本的奇數格式,其后是包含命令行終端樣式通配符的括號。
所以我想這會起作用:
model_->setNameFilters(
QStringList("Supported files (*.cpp *.cxx *.c *.hpp *.h)"));
通常,除非文檔或函數名稱另有說明,否則我將謹慎地假設將過濾器用作QString的位置將知道由正則表達式構成的內容!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.