Difference between revisions of "Filter Columns in a QFileSystemModel"
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);
====