Filter Columns in a QFileSystemModel

From Qt Wiki
Revision as of 09:54, 24 February 2015 by Maintenance script (talk | contribs)
Jump to navigation Jump to search


How to Filter Columns in a QFileSystemModel

Sometimes one does not want to display all the columns of a "QFileSystemModel":http://doc.qt.nokia.com/stable/qfilesystemmodel.html, like discussed in "this forum thread":http://developer.qt.nokia.com/forums/viewthread/3114/.

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 <code&gt;QHeaderView&lt;/code&gt;, but the alternative to subclass "QSortFilterProxyModel&quot;:http://doc.qt.nokia.com/stable/qsortfilterproxymodel.html and reimplement the <code&gt;filterAcceptsColumn()</code&gt; method also works well.

Column hiding using QHeaderView

All multi-column views provide access to a "QHeaderView&quot;:http://doc.qt.nokia.com/stable/qheaderview.html . 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.

<br />//hide the third and fourth column, note that the column numbers are 0-based<br />QHeaderView* hHeader = m_theTableview-&gt;horizontalHeader();<br />hHeader-&gt;hideSection(2);<br />hHeader-&gt;hideSection(3);<br />

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

<br />#include &lt;QSortFilterProxyModel&amp;gt; ====

class FSMProxy : public QSortFilterProxyModel<br />{<br /> Q_OBJECT

public:<br /> FSMProxy(QObject *parent);

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

==== fsmproxy.cpp

<br />FSMProxy::FSMProxy(QObject *parent)<br /> : QSortFilterProxyModel(parent)<br />{<br />} ====

bool FSMProxy::filterAcceptsColumn(int source_column, const QModelIndex &amp;source_parent) const<br />{<br /> Q_UNUSED(source_parent)

    // adjust the columns you want to filter out here<br />    // return false for those that will be hidden<br /> if(source_column  2 || source_column  3)<br /> return false;<br /> return true;<br />}<br />

Usage
<br />    QFileSystemModel *fsm = new QFileSystemModel(this);<br />    FSMProxy *proxy = new FSMProxy(this);<br />    proxy-&gt;setSourceModel(fsm);<br />    treeView-&gt;setModel(proxy);<br />