QFileDialog提供了一个函数---setproxyModel。。就是用这个来玩了。就是override filterAcceptsRow的虚函数,里面定制自己的过滤需求。返回bool 下面就是判断是否是目录,只显示目录文件夹。
1 #ifndef PROXY_MODEL_H2 #define PROXY_MODEL_H
3
4 #include
5
6
7 class FileFilterProxyModel : publicQSortFilterProxyModel8 {9 public:10 FileFilterProxyModel(QObject*parent) :QSortFilterProxyModel(parent){}11
12 protected:13 virtual bool filterAcceptsRow(int source_row, const QModelIndex& source_parent) const;14 };15
16
17 #endif
#include "proxymodel.h"
#include
#include
bool FileFilterProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const
{
QModelIndex index0 = sourceModel()->index(sourceRow, 0, sourceParent);
QFileSystemModel* fileModel = qobject_cast(sourceModel());
if (fileModel != NULL && fileModel->isDir(index0))
{
qDebug() << fileModel->fileName(index0);
return true;
}
else
return false;
// uncomment to execute default implementation
//return QSortFilterProxyModel::filterAcceptsRow(sourceRow, sourceParent);
}
1 QFileDialog dialog;2 FileFilterProxyModel* proxyModel = newFileFilterProxyModel();
dialog.setOption(QFileDialog::DontUseNativeDialog);3 dialog.setProxyModel(proxyModel);4 dialog.exec();
references:
http://stackoverflow.com/questions/4893122/filtering-in-qfiledialog
http://stackoverflow.com/questions/2101100/qfiledialog-filtering-folders