Filter Columns in a QFileSystemModel

From Qt Wiki
Revision as of 08:23, 4 March 2015 by AutoSpider (talk | contribs) (Convert ExpressionEngine links)
Jump to navigation Jump to search
This article may require cleanup to meet the Qt Wiki's quality standards. Reason: Auto-imported from ExpressionEngine.
Please improve this article if you can. Remove the {{cleanup}} tag and add this page to Updated pages list after it's clean.

How to Filter Columns in a QFileSystemModel

Sometimes one does not want to display all the columns of a QFileSystemModel, like discussed in this forum thread.

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 and reimplement the

filterAcceptsColumn()

method also works well.

Column hiding using QHeaderView

All multi-column views provide access to a QHeaderView . 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
QHeaderView* hHeader = m_theTableview->horizontalHeader();
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> ====

class FSMProxy : public QSortFilterProxyModel
{
 Q_OBJECT

public:
 FSMProxy(QObject *parent);

protected:
 bool filterAcceptsColumn(int source_column, const QModelIndex &amp;source_parent) const;
};

==== fsmproxy.cpp

FSMProxy::FSMProxy(QObject *parent)
 : QSortFilterProxyModel(parent)
{
} ====

bool FSMProxy::filterAcceptsColumn(int source_column, const QModelIndex &amp;source_parent) const
{
 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

    QFileSystemModel *fsm = new QFileSystemModel(this);
    FSMProxy *proxy = new FSMProxy(this);
    proxy->setSourceModel(fsm);
    treeView->setModel(proxy);

====