aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/items
diff options
context:
space:
mode:
authorUlf Hermann <[email protected]>2025-03-11 09:17:13 +0100
committerUlf Hermann <[email protected]>2025-03-18 11:22:12 +0100
commitf469d538a71a500a2b2cec6133065b780c3a8792 (patch)
tree2c1513a51a134231df24af42618b557b147021e5 /src/quick/items
parent1cf72c90de4b13302a0db9ac3f177d5a2662b9ff (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.cpp37
-rw-r--r--src/quick/items/qquicktableview_p.h8
-rw-r--r--src/quick/items/qquicktableview_p_p.h4
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();