#ifndef EXPRESSIONSORTER_H #define EXPRESSIONSORTER_H #include "sorter.h" #include class QQmlExpression; namespace qqsfpm { class QQmlSortFilterProxyModel; class ExpressionSorter : public Sorter { Q_OBJECT Q_PROPERTY(QQmlScriptString expression READ expression WRITE setExpression NOTIFY expressionChanged) public: using Sorter::Sorter; const QQmlScriptString& expression() const; void setExpression(const QQmlScriptString& scriptString); void proxyModelCompleted(const QQmlSortFilterProxyModel& proxyModel) override; Q_SIGNALS: void expressionChanged(); protected: int compare(const QModelIndex& sourceLeft, const QModelIndex& sourceRight, const QQmlSortFilterProxyModel& proxyModel) const override; private: void updateContext(const QQmlSortFilterProxyModel& proxyModel); void updateExpression(); QQmlScriptString m_scriptString; QQmlExpression* m_expression = nullptr; QQmlContext* m_context = nullptr; }; } #endif // EXPRESSIONSORTER_H