2011-12-10 59 views
1

我設置我的QFileSystemModel與以下過濾器:文件中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())); 

...但˚F iles顯示灰色。爲什麼,以及如何使他們「正常」。

+0

你有什麼其他的代碼來顯示:這可以通過調用改變?你是否在任何地方調用setNameFilters()?如果你說'setNameFilters(QStringList());'?會發生什麼? – HostileFork

+0

@HostileFork看我的編輯。 – user336635

回答

0

QFileSystemModel使用的「名稱過濾器」沒有很好的記錄。但我要承擔他們可能是相同的格式,在其setNameFilter(S)使用的QFileDialog的那些:

http://doc.qt.nokia.com/stable/qfiledialog.html#setNameFilter

如果是這樣,那些不是正則表達式。它們是一種奇怪的文本格式,後面跟着包含命令行終端樣式通配符的圓括號。

所以我猜測這會工作:

model_->setNameFilters(
    QStringList("Supported files (*.cpp *.cxx *.c *.hpp *.h)")); 

在一般情況下,除非文檔或函數的名稱指示,否則,我會小心的假設,即採取過濾器與QString地方會知道應該做什麼正則表達式!

1

實際上,不同的Qt類之間的格式不一致。如果他們採用單個QString,那麼就像@HostileFork所說的那樣。在這種情況下,然而,功能setNameFilters()需要一個QStringList中,這意味着你要:

fileModel->setNameFilters({"*.cpp", "*.cxx", "*.c", "*.hpp", "*.h"}); 

由於您輸入了錯誤的格式(正則表達式,而不是窗口的通配符),一切都被標記爲「篩選了這一點」因爲沒有匹配奇怪的語法。

爲什麼變灰了?因爲默認情況下,QFileSystemModel禁用/灰色文件被過濾(bwah?),而不是隱藏它們。

fileModel->setNameFilterDisables(false); 

​​