1 #pragma once 2 3 #include <QtCore/qsortfilterproxymodel.h> 4 #include <QtQml/qqmlparserstatus.h> 5 6 class SortFilterProxyModel : public QSortFilterProxyModel, public QQmlParserStatus 7 { 8 Q_OBJECT 9 Q_INTERFACES(QQmlParserStatus) 10 11 Q_PROPERTY(QObject *source READ source WRITE setSource) 12 13 Q_PROPERTY(QByteArray sortRole READ sortRole WRITE setSortRole) 14 Q_PROPERTY(Qt::SortOrder sortOrder READ sortOrder WRITE setSortOrder) 15 16 Q_PROPERTY(QByteArray filterRole READ filterRole WRITE setFilterRole) 17 Q_PROPERTY(QString filterString READ filterString WRITE setFilterString NOTIFY filterStringChanged) 18 Q_PROPERTY(FilterSyntax filterSyntax READ filterSyntax WRITE setFilterSyntax) 19 20 Q_PROPERTY(int filterKeyColumn READ filterKeyColumn WRITE setFilterKeyColumn) 21 22 Q_ENUMS(FilterSyntax) 23 24 public: 25 explicit SortFilterProxyModel(QObject *parent = 0); 26 27 QObject *source() const; 28 void setSource(QObject *source); 29 30 QByteArray sortRole() const; 31 Q_INVOKABLE void setSortRole(const QByteArray &role); 32 33 Q_INVOKABLE void setSortOrder(Qt::SortOrder order); 34 35 QByteArray filterRole() const; 36 void setFilterRole(const QByteArray &role); 37 38 QString filterString() const; 39 void setFilterString(const QString &filter); 40 41 enum FilterSyntax { 42 RegExp, 43 Wildcard, 44 FixedString 45 }; 46 47 FilterSyntax filterSyntax() const; 48 void setFilterSyntax(FilterSyntax syntax); 49 50 void classBegin(); 51 void componentComplete(); 52 53 Q_INVOKABLE int getOriginalRowIndex(int i); 54 55 signals: 56 void filterStringChanged(); 57 58 protected: 59 int roleKey(const QByteArray &role) const; 60 61 private: 62 bool m_complete; 63 QByteArray m_sortRole; 64 QByteArray m_filterRole; 65 }; 66