How to Filter Columns in a QFileSystemModel
Sometimes one does not want to display all the columns of a QFileSystemModel [doc.qt.nokia.com], like discussed in this forum thread [developer.qt.nokia.com].
This can be achieved in two ways, either by hiding the columns in the view, by using a specialized proxy model. The easiest way is to hide the columns using the QHeaderView, but the alternative to subclass QSortFilterProxyModel [doc.qt.nokia.com] and reimplement the filterAcceptsColumn() method also works well.
Column hiding using QHeaderView
All multi-column views provide access to a QHeaderView [doc.qt.nokia.com] . This is the widget that provides the headers above the columns of data, and allows the user to resize those columns, or click the headers to trigger a sorting order. You can also use this widget to hide columns in your view.
- //hide the third and fourth column, note that the column numbers are 0-based
- hHeader->hideSection(2);
- hHeader->hideSection(3);
The alternative method of using a custom proxy model is outlined below.
Column hiding using QSortFilterProxyModel
Be aware that the column count is 0-based and that it is hard coded.
fsmproxy.h
- #include <QSortFilterProxyModel>
-
- {
- Q_OBJECT
-
- public:
-
- protected:
- };
- #include <QSortFilterProxyModel>
- {
- Q_OBJECT
- public:
- protected:
- };
fsmproxy.cpp
- {
- }
-
-
- {
- Q_UNUSED(source_parent)
-
- // adjust the columns you want to filter out here
- // return false for those that will be hidden
- if(source_column == 2 || source_column == 3)
- return false;
- return true;
- }
- {
- }
- {
- Q_UNUSED(source_parent)
- // adjust the columns you want to filter out here
- // return false for those that will be hidden
- if(source_column == 2 || source_column == 3)
- return false;
- return true;
- }
Usage
- FSMProxy *proxy = new FSMProxy(this);
- proxy->setSourceModel(fsm);
- treeView->setModel(proxy);
- FSMProxy *proxy = new FSMProxy(this);
- proxy->setSourceModel(fsm);
- treeView->setModel(proxy);

