diff options
author | Ulf Hermann <[email protected]> | 2025-03-11 09:17:13 +0100 |
---|---|---|
committer | Ulf Hermann <[email protected]> | 2025-03-18 11:22:12 +0100 |
commit | f469d538a71a500a2b2cec6133065b780c3a8792 (patch) | |
tree | 2c1513a51a134231df24af42618b557b147021e5 /src/quick/items | |
parent | 1cf72c90de4b13302a0db9ac3f177d5a2662b9ff (diff) |
Quick: Expose delegateModelAccess from QQuickTableView
It mirrors the same property from any internal table instance model. If
the internal model is not a table instance model, the value is
"Qt5ReadWrite".
[ChangeLog][QtQuick] TableView and TreeView now have a new property
delegateModelAccess. Setting it to DelegateModel.ReadWrite allows you to
write values into the model via required properties just as you could
with context properties.
Task-number: QTBUG-132420
Change-Id: Ie3ee1da3a8ec56390a645f95e9862e42dcd01deb
Reviewed-by: Fabian Kosmale <[email protected]>
Diffstat (limited to 'src/quick/items')
-rw-r--r-- | src/quick/items/qquicktableview.cpp | 37 | ||||
-rw-r--r-- | src/quick/items/qquicktableview_p.h | 8 | ||||
-rw-r--r-- | src/quick/items/qquicktableview_p_p.h | 4 |
3 files changed, 48 insertions, 1 deletions
diff --git a/src/quick/items/qquicktableview.cpp b/src/quick/items/qquicktableview.cpp index 3e83cb1d09..d9ac4328fd 100644 --- a/src/quick/items/qquicktableview.cpp +++ b/src/quick/items/qquicktableview.cpp @@ -4508,6 +4508,7 @@ void QQuickTableViewPrivate::syncWithPendingChanges() syncViewportRect(); syncModel(); syncDelegate(); + syncDelegateModelAccess(); syncSyncView(); syncPositionView(); @@ -4556,6 +4557,18 @@ void QQuickTableViewPrivate::syncDelegate() tableModel->setDelegate(assignedDelegate); } +void QQuickTableViewPrivate::syncDelegateModelAccess() +{ + if (!tableModel) { + // Only the tableModel uses the delegateModelAccess assigned to a + // TableView. DelegateModel has its own delegateModelAccess, and + // ObjectModel doesn't use one. + return; + } + + tableModel->setDelegateModelAccess(assignedDelegateModelAccess); +} + QVariant QQuickTableViewPrivate::modelImpl() const { return assignedModel; @@ -5808,6 +5821,30 @@ void QQuickTableView::setEditTriggers(QQuickTableView::EditTriggers editTriggers emit editTriggersChanged(); } +/*! + \qmlproperty enumeration QtQuick::TableView::delegateModelAccess + + \include delegatemodelaccess.qdocinc +*/ +QQmlDelegateModel::DelegateModelAccess QQuickTableView::delegateModelAccess() const +{ + Q_D(const QQuickTableView); + return d->assignedDelegateModelAccess; +} + +void QQuickTableView::setDelegateModelAccess( + QQmlDelegateModel::DelegateModelAccess delegateModelAccess) +{ + Q_D(QQuickTableView); + if (delegateModelAccess == d->assignedDelegateModelAccess) + return; + + d->assignedDelegateModelAccess = delegateModelAccess; + d->scheduleRebuildTable(QQuickTableViewPrivate::RebuildOption::All); + + emit delegateModelAccessChanged(); +} + bool QQuickTableView::reuseItems() const { return bool(d_func()->reusableFlag == QQmlTableInstanceModel::Reusable); diff --git a/src/quick/items/qquicktableview_p.h b/src/quick/items/qquicktableview_p.h index cfcc9eae8a..d437f29724 100644 --- a/src/quick/items/qquicktableview_p.h +++ b/src/quick/items/qquicktableview_p.h @@ -27,6 +27,7 @@ QT_REQUIRE_CONFIG(quick_tableview); #include <QtQml/private/qqmlnullablevalue_p.h> #include <QtQml/private/qqmlfinalizer_p.h> #include <QtQml/private/qqmlguard_p.h> +#include <QtQmlModels/private/qqmldelegatemodel_p.h> QT_BEGIN_NAMESPACE @@ -68,6 +69,8 @@ class Q_QUICK_EXPORT QQuickTableView : public QQuickFlickable, public QQmlFinali Q_PROPERTY(bool resizableRows READ resizableRows WRITE setResizableRows NOTIFY resizableRowsChanged REVISION(6, 5) FINAL) Q_PROPERTY(EditTriggers editTriggers READ editTriggers WRITE setEditTriggers NOTIFY editTriggersChanged REVISION(6, 5) FINAL) Q_PROPERTY(SelectionMode selectionMode READ selectionMode WRITE setSelectionMode NOTIFY selectionModeChanged REVISION(6, 6) FINAL) + Q_PROPERTY(QQmlDelegateModel::DelegateModelAccess delegateModelAccess READ delegateModelAccess + WRITE setDelegateModelAccess NOTIFY delegateModelAccessChanged REVISION(6, 10) FINAL) QML_NAMED_ELEMENT(TableView) QML_ADDED_IN_VERSION(2, 12) @@ -185,6 +188,9 @@ public: EditTriggers editTriggers() const; void setEditTriggers(EditTriggers editTriggers); + QQmlDelegateModel::DelegateModelAccess delegateModelAccess() const; + void setDelegateModelAccess(QQmlDelegateModel::DelegateModelAccess delegateModelAccess); + Q_INVOKABLE void forceLayout(); Q_INVOKABLE void positionViewAtCell(const QPoint &cell, PositionMode mode, const QPointF &offset = QPointF(), const QRectF &subRect = QRectF()); Q_INVOKABLE void positionViewAtIndex(const QModelIndex &index, PositionMode mode, const QPointF &offset = QPointF(), const QRectF &subRect = QRectF()); @@ -274,7 +280,7 @@ Q_SIGNALS: Q_REVISION(6, 6) void selectionModeChanged(); Q_REVISION(6, 8) void rowMoved(int logicalIndex, int oldVisualIndex, int newVisualIndex); Q_REVISION(6, 8) void columnMoved(int logicalIndex, int oldVisualIndex, int newVisualIndex); - + Q_REVISION(6, 10) void delegateModelAccessChanged(); protected: void geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry) override; diff --git a/src/quick/items/qquicktableview_p_p.h b/src/quick/items/qquicktableview_p_p.h index c25772eaef..ee25d2cc44 100644 --- a/src/quick/items/qquicktableview_p_p.h +++ b/src/quick/items/qquicktableview_p_p.h @@ -393,6 +393,9 @@ public: bool warnNoSelectionModel = true; + QQmlDelegateModel::DelegateModelAccess assignedDelegateModelAccess + = QQmlDelegateModel::Qt5ReadWrite; + QJSValue rowHeightProvider; QJSValue columnWidthProvider; @@ -594,6 +597,7 @@ public: virtual void syncWithPendingChanges(); virtual void syncDelegate(); + virtual void syncDelegateModelAccess(); virtual QVariant modelImpl() const; virtual void setModelImpl(const QVariant &newModel); virtual void syncModel(); |