#include <qxtsortfilterproxymodel.h>
Public Member Functions | |
QxtSortFilterProxyModel (QObject *parent=0) | |
virtual bool | filterAcceptsRow (int source_row, const QModelIndex &source_parent) const |
void | beginDeclareFilter () |
void | endDeclareFilter () |
void | setFilter (const int column, const QVariant &value, const int role=Qt::DisplayRole, Qt::MatchFlags flags=Qt::MatchContains) |
void | setFilterValue (const int column, const QVariant &value) |
void | setFilterRole (const int column, const int role=Qt::DisplayRole) |
void | setFilterFlags (const int column, const Qt::MatchFlags flags=Qt::MatchContains) |
void | removeFilter (const int column) |
QVariant | filterValue (const int column) const |
int | filterRole (const int column) const |
Qt::MatchFlags | filterFlags (const int column) const |
bool | isFiltered (const int column) |
Friends | |
class | QxtSortFilterProxyModelPrivate |
a multi column filter model The QxtSortFilterProxyModel makes it possible to filter over multiple columns.
*QxtSortFilterProxyModel * filterModel = new QxtSortFilterProxyModel(parent); *filterModel->setSourceModel(sourceModel); *filterModel->beginDeclareFilter(); *filterModel->setFilter(1,QVariant("SomeStringValue"),Qt::DisplayRole,Qt::MatchExactly); //remove some old filter *filterModel->removeFilter(2); *filterModel->setFilter(5,QVariant(1234),Qt::DisplayRole,Qt::MatchExactly); *filterModel->endDeclateFilter(); *
Now the model will filter column 1 and 5, to be accepted by the filtermodel a row needs to pass all filters
Definition at line 38 of file qxtsortfilterproxymodel.h.
QxtSortFilterProxyModel::QxtSortFilterProxyModel | ( | QObject * | parent = 0 ) |
Definition at line 116 of file qxtsortfilterproxymodel.cpp.
References QXT_INIT_PRIVATE.
: QSortFilterProxyModel(parent) { QXT_INIT_PRIVATE(QxtSortFilterProxyModel); qxt_d().m_declaringFilter = false; }
void QxtSortFilterProxyModel::beginDeclareFilter | ( | ) |
tells the model you want to declare a new filter If you have a lot of data in your model it can be slow to declare more than one filter, because the model will always rebuild itself. If you call this member before setting the new filters the model will invalidate its contents not before you call
Definition at line 128 of file qxtsortfilterproxymodel.cpp.
{
qxt_d().m_declaringFilter = true;
}
void QxtSortFilterProxyModel::endDeclareFilter | ( | ) |
stops the filter declaration and invalidates the filter
Definition at line 137 of file qxtsortfilterproxymodel.cpp.
{ if(qxt_d().m_declaringFilter){ qxt_d().m_declaringFilter = false; invalidateFilter(); } }
bool QxtSortFilterProxyModel::filterAcceptsRow | ( | int | source_row, |
const QModelIndex & | source_parent | ||
) | const [virtual] |
Definition at line 145 of file qxtsortfilterproxymodel.cpp.
References QxtModelFilterPrivate::acceptsValue(), and QxtModelFilterPrivate::m_role.
{ QList<int> filterColumns = qxt_d().filters.keys(); foreach(int currCol,filterColumns){ QxtModelFilterPrivate filter = qxt_d().filters[currCol]; // if the column specified by the user is -1 // that means all columns need to pass the filter to get into the result if (currCol == -1) { int column_count = sourceModel()->columnCount(source_parent); for (int column = 0; column < column_count; ++column) { QModelIndex source_index = sourceModel()->index(source_row, column, source_parent); QVariant key = sourceModel()->data(source_index, filter.m_role); if (!filter.acceptsValue(key)) return false; } continue; } QModelIndex source_index = sourceModel()->index(source_row, currCol , source_parent); if (!source_index.isValid()) // the column may not exist continue; QVariant key = sourceModel()->data(source_index, filter.m_role); if(!filter.acceptsValue(key)) return false; } return true; }
Qt::MatchFlags QxtSortFilterProxyModel::filterFlags | ( | const int | column ) | const |
returns the filter flags for the given column
Definition at line 244 of file qxtsortfilterproxymodel.cpp.
{ if(qxt_d().filters.contains(column)) return qxt_d().filters[column].m_flags; return Qt::MatchContains; }
int QxtSortFilterProxyModel::filterRole | ( | const int | column ) | const |
Definition at line 233 of file qxtsortfilterproxymodel.cpp.
{ if(qxt_d().filters.contains(column)) return qxt_d().filters[column].m_role; return -1; }
QVariant QxtSortFilterProxyModel::filterValue | ( | const int | column ) | const |
Definition at line 226 of file qxtsortfilterproxymodel.cpp.
{ if(qxt_d().filters.contains(column)) return qxt_d().filters[column].m_value; return QVariant(); }
bool QxtSortFilterProxyModel::isFiltered | ( | const int | column ) |
Definition at line 254 of file qxtsortfilterproxymodel.cpp.
{
return qxt_d().filters.contains(column);
}
void QxtSortFilterProxyModel::removeFilter | ( | const int | column ) |
Definition at line 183 of file qxtsortfilterproxymodel.cpp.
{ if(qxt_d().filters.contains(column)){ qxt_d().filters.remove(column); if(!qxt_d().m_declaringFilter) invalidateFilter(); } }
void QxtSortFilterProxyModel::setFilter | ( | const int | column, |
const QVariant & | value, | ||
const int | role = Qt::DisplayRole , |
||
Qt::MatchFlags | flags = Qt::MatchContains |
||
) |
Definition at line 172 of file qxtsortfilterproxymodel.cpp.
{ if(qxt_d().filters.contains(column)) qxt_d().filters[column] = QxtModelFilterPrivate(value,role,flags); else qxt_d().filters.insert(column,QxtModelFilterPrivate(value,role,flags)); if(!qxt_d().m_declaringFilter) invalidateFilter(); }
void QxtSortFilterProxyModel::setFilterFlags | ( | const int | column, |
const Qt::MatchFlags | flags = Qt::MatchContains |
||
) |
Definition at line 215 of file qxtsortfilterproxymodel.cpp.
{ if(qxt_d().filters.contains(column)) qxt_d().filters[column].m_flags = flags; else qxt_d().filters.insert(column,QxtModelFilterPrivate(QVariant(),Qt::DisplayRole,flags)); if(!qxt_d().m_declaringFilter) invalidateFilter(); }
void QxtSortFilterProxyModel::setFilterRole | ( | const int | column, |
const int | role = Qt::DisplayRole |
||
) |
Definition at line 204 of file qxtsortfilterproxymodel.cpp.
{ if(qxt_d().filters.contains(column)) qxt_d().filters[column].m_role=role; else qxt_d().filters.insert(column,QxtModelFilterPrivate(QVariant(),role)); if(!qxt_d().m_declaringFilter) invalidateFilter(); }
void QxtSortFilterProxyModel::setFilterValue | ( | const int | column, |
const QVariant & | value | ||
) |
Definition at line 193 of file qxtsortfilterproxymodel.cpp.
{ if(qxt_d().filters.contains(column)) qxt_d().filters[column].m_value = value; else qxt_d().filters.insert(column,QxtModelFilterPrivate(value)); if(!qxt_d().m_declaringFilter) invalidateFilter(); }
friend class QxtSortFilterProxyModelPrivate [friend] |
Definition at line 41 of file qxtsortfilterproxymodel.h.