Filter Columns in a QFileSystemModel: Difference between revisions
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
[[Category:HowTo]] | [[Category:HowTo]] | ||
[[Category:snippets]] | |||
= How to Filter Columns in a QFileSystemModel = | = How to Filter Columns in a QFileSystemModel = | ||
Sometimes one does not want to display all the columns of a | 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 | 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>QHeaderView</code>, but the alternative to subclass "QSortFilterProxyModel":http://doc.qt.nokia.com/stable/qsortfilterproxymodel.html and reimplement the <code>filterAcceptsColumn()</code> method also works well. | ||
== Column hiding using QHeaderView == | == Column hiding using QHeaderView == | ||
All multi-column views provide access to a | All multi-column views provide access to a "QHeaderView":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. | ||
<code> | <code> | ||
//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); | |||
</code> | |||
The alternative method of using a custom proxy model is outlined below. | The alternative method of using a custom proxy model is outlined below. | ||
Line 19: | Line 25: | ||
Be aware that the column count is 0-based and that it is hard coded. | Be aware that the column count is 0-based and that it is hard coded. | ||
==== fsmproxy.h | ==== fsmproxy.h | ||
<code> | |||
#include <QSortFilterProxyModel> ==== | |||
class FSMProxy : public QSortFilterProxyModel | class FSMProxy : public QSortFilterProxyModel | ||
{ | |||
Q_OBJECT | |||
public: | public: | ||
FSMProxy(QObject *parent); | |||
protected: | protected: | ||
bool filterAcceptsColumn(int source_column, const QModelIndex &source_parent) const; | |||
}; | |||
</code> | |||
==== fsmproxy.cpp | ==== fsmproxy.cpp | ||
<code> | |||
FSMProxy::FSMProxy(QObject *parent) | |||
: QSortFilterProxyModel(parent) | |||
{ | |||
} ==== | |||
bool FSMProxy::filterAcceptsColumn(int source_column, const QModelIndex &source_parent) const | bool FSMProxy::filterAcceptsColumn(int source_column, const QModelIndex &source_parent) const | ||
{ | |||
Q_UNUSED(source_parent) | |||
// adjust the columns you want to filter out here | // 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; | |||
} | |||
</code> | |||
==== Usage | ==== Usage | ||
<code> | |||
QFileSystemModel *fsm = new QFileSystemModel(this); | |||
FSMProxy *proxy = new FSMProxy(this); | |||
proxy->setSourceModel(fsm); | |||
treeView->setModel(proxy); | |||
</code> ==== |
Revision as of 10:14, 25 February 2015
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
QHeaderView
, but the alternative to subclass "QSortFilterProxyModel":http://doc.qt.nokia.com/stable/qsortfilterproxymodel.html and reimplement the
filterAcceptsColumn()
method also works well.
Column hiding using QHeaderView
All multi-column views provide access to a "QHeaderView":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.
//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);
====