Несколько другой пример собственного фильтра... Просто и наглядно... Выбираются строки, где дата находится в нужном диапазоне.... Разобрался что как работает и вот решил свой пример выложить... Может кому и понадобится.... Сделал так:
#ifndef MYDATEFILTERPROXYMODEL_H
#define MYDATEFILTERPROXYMODEL_H
#include<QDate>
#include<QSortFilterProxyModel>
class MyDateFilterProxyModel: public QSortFilterProxyModel
{
Q_OBJECT
public:
MyDateFilterProxyModel(QObject *parent = 0);
private:
int m_nFilterIndex;
QDate m_dtMinDate;
QDate m_dtMaxDate;
protected:
bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const;
public:
void setFilterIndex(int nIndex)
{
m_nFilterIndex = nIndex;
}
void setMinDate(QDate date)
{
m_dtMinDate = date;
}
void setMaxDate(QDate date)
{
m_dtMaxDate = date;
}
};
#endif // MYDATEFILTERPROXYMODEL_H
И, собсна, сама реализация...
#include "mydatefilterproxymodel.h"
MyDateFilterProxyModel::MyDateFilterProxyModel(QObject *parent):
QSortFilterProxyModel(parent)
{
}
bool MyDateFilterProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
{
QModelIndex idx = sourceModel()->index(source_row, m_nFilterIndex, source_parent);
return (sourceModel()->data(idx).toDate() >= m_dtMinDate)
&& (sourceModel()->data(idx).toDate() <= m_dtMaxDate);
}
Далее создастся диалог ввода дат фильтра... и будет обрабатываться так:
m_pDateFilterModel = new MyDateFilterProxyModel(this);
m_pDateFilterModel->setSourceModel(m_pTableModel);
m_pDateFilterModel->setFilterIndex(m_pTableModel->fieldIndex("dt_date"));
m_pDateFilterModel->setMinDate(QDate(2011, 10, 01));//Дата из дилога
m_pDateFilterModel->setMaxDate(QDate(2011, 10, 31));//Дата из дилога
Просто и доступно....
Мот пригодится....