Qt wiki will be updated on October 12th 2023 starting at 11:30 AM (EEST) and the maintenance will last around 2-3 hours. During the maintenance the site will be unavailable.
Filter Columns in a QFileSystemModel
Introduction
Sometimes one does not want to display all the columns of a QFileSystemModel.
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& source_parent) const;
};
fsmproxy.cpp
FSMProxy::FSMProxy(QObject *parent) : QSortFilterProxyModel(parent) {}
bool FSMProxy::filterAcceptsColumn(int source_column, const QModelIndex& 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);