Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qqmlcompositefilterbase.cpp
Go to the documentation of this file.
1// Copyright (C) 2026 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
5#include <QtQmlModels/private/qqmlcompositefilterbase_p.h>
6
7QT_BEGIN_NAMESPACE
8
9/*!
10 \qmltype CompositeFilter
11 \internal
12 \inherits FilterBase
13 \inqmlmodule QtQml.Models
14 \since 6.12
15 \preliminary
16 \brief Abstract base type providing functionality common to composite
17 filters.
18
19 CompositeFilter provides a set of common properties that all composite
20 filter types inherit, such as \l AllOfFilter and \l AnyOfFilter.
21*/
22
23QQmlCompositeFilterBase::QQmlCompositeFilterBase(QObject *parent)
24 : QQmlFilterCompositor(new QQmlFilterCompositorPrivate, parent)
25{
26}
27
28QQmlCompositeFilterBase::QQmlCompositeFilterBase(QQmlFilterCompositorPrivate *priv, QObject *parent)
29 : QQmlFilterCompositor(priv, parent)
30{
31
32}
33
34void QQmlCompositeFilterBase::update(const QQmlSortFilterProxyModel *proxyModel)
35{
36 Q_D(QQmlCompositeFilterBase);
37 auto *sfpm = const_cast<QQmlSortFilterProxyModel *>(proxyModel);
38
39 if (d->m_sfpmModel != sfpm) {
40 if (d->m_sfpmModel) {
41 disconnect(d->m_sfpmModel, &QQmlSortFilterProxyModel::modelReset,
42 this, &QQmlFilterCompositor::updateFilters);
43 for (auto &filter: d->m_filters)
44 disconnect(filter, &QQmlFilterBase::invalidateModel,
45 d->m_sfpmModel, &QQmlSortFilterProxyModel::invalidate);
46 }
47
48 d->m_sfpmModel = sfpm;
49
50 if (d->m_sfpmModel) {
51 connect(d->m_sfpmModel, &QQmlSortFilterProxyModel::modelReset,
52 this, &QQmlFilterCompositor::updateFilters);
53 for (auto &filter: d->m_filters)
54 connect(filter, &QQmlFilterBase::invalidateModel,
55 d->m_sfpmModel, &QQmlSortFilterProxyModel::invalidate);
56 }
57 }
58
59 updateFilters();
60}
61
62bool QQmlCompositeFilterBase::isActive() const
63{
64 Q_D(const QQmlFilterCompositor);
65 return enabled() && !d->m_effectiveFilters.isEmpty();
66}
67
68void QQmlCompositeFilterBase::refreshCache()
69{
70 Q_D(QQmlFilterCompositor);
71 const auto prevCount = d->m_effectiveFilters.count();
72 QQmlFilterCompositor::refreshCache();
73 if (d->m_effectiveFilters.count() != prevCount)
74 emit invalidateCache(this);
75}
76
77bool QQmlCompositeFilterBase::supportColumnFiltering() const
78{
79 Q_D(const QQmlFilterCompositor);
80 return std::any_of(d->m_effectiveFilters.begin(), d->m_effectiveFilters.end(),
81 [](const QQmlFilterBase *f) { return f->supportColumnFiltering(); });
82}
83
84QT_END_NAMESPACE
85
86#include "moc_qqmlcompositefilterbase_p.cpp"