簡體   English   中英

QFileSystemModel中的文件為灰色

[英]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的'nameFilterDisables'屬性

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.

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