我需要顯示一個特定目錄的QTreeView,並且我想讓用戶有可能用RegExp過濾這些文件。QTreeView,QFileSystemModel,setRootPath和QSortFilterProxyModel用RegExp進行過濾
據我所知Qt文檔我可以在標題這樣提到的類實現這一點:
// Create the Models
QFileSystemModel *fileSystemModel = new QFileSystemModel(this);
QSortFilterProxyModel *proxyModel = new QSortFilterProxyModel(this);
// Set the Root Path
QModelIndex rootModelIndex = fileSystemModel->setRootPath("E:\\example");
// Assign the Model to the Proxy and the Proxy to the View
proxyModel->setSourceModel(fileSystemModel);
ui->fileSystemView->setModel(proxyModel);
// Fix the TreeView on the Root Path of the Model
ui->fileSystemView->setRootIndex(proxyModel->mapFromSource(rootModelIndex));
// Set the RegExp when the user enters it
connect(ui->nameFilterLineEdit, SIGNAL(textChanged(QString)),
proxyModel, SLOT(setFilterRegExp(QString)));
當開始該程序的樹視圖被正確地固定在指定的目錄。但只要用戶更改RegExp,它就像TreeView忘記RootIndex一樣。刪除RegExp LineEdit中的所有文本(或輸入RegExp,如「。」)後,它再次顯示所有目錄(在Windows上,這意味着所有驅動器等)
我在做什麼錯? :/
你有沒有可能分享你所做的修改?我現在遇到了這個確切的問題,但我不知道如何解決它。 – 2011-04-19 22:13:56
很遺憾,我無法再訪問此項目。這是郵件列表線程:http://www.mentby.com/Group/qt-interest/qtreeview-qfilesystemmodel-setrootpath-and-qsortfilterproxymodel-with-regexp-for-filtering.html – Strayer 2011-05-23 19:44:09