Filter Columns in a QFileSystemModel: Difference between revisions
AutoSpider (talk | contribs) (Add "cleanup" tag) |
AutoSpider (talk | contribs) (Convert ExpressionEngine links) |
||
Line 6: | Line 6: | ||
= 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 [http://doc.qt.nokia.com/stable/qfilesystemmodel.html QFileSystemModel], like discussed in [http://developer.qt.nokia.com/forums/viewthread/3114/ 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 <code>QHeaderView</code>, but the alternative to subclass | 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 [http://doc.qt.nokia.com/stable/qsortfilterproxymodel.html QSortFilterProxyModel] 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 [http://doc.qt.nokia.com/stable/qheaderview.html 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. | ||
<code> | <code> |
Revision as of 08:23, 4 March 2015
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 &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);
====