Public Member Functions | Friends

QxtSortFilterProxyModel Class Reference

#include <qxtsortfilterproxymodel.h>

Collaboration diagram for QxtSortFilterProxyModel:
Collaboration graph
[legend]

List of all members.

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

Detailed Description

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.


Constructor & Destructor Documentation

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;
}

Member Function Documentation

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

See also:
endDeclareFilter()

Definition at line 128 of file qxtsortfilterproxymodel.cpp.

{
    qxt_d().m_declaringFilter = true;
}
void QxtSortFilterProxyModel::endDeclareFilter (  )

stops the filter declaration and invalidates the filter

See also:
beginDeclareFilter ( )

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

Note:
if the column is not filtered it will return the default value

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 )
Returns:
true if the column is filtered

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();
}

Friends And Related Function Documentation

friend class QxtSortFilterProxyModelPrivate [friend]

Definition at line 41 of file qxtsortfilterproxymodel.h.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines