summaryrefslogtreecommitdiffstats
path: root/src/corelib/doc
diff options
context:
space:
mode:
authorIvan Solovev <ivan.solovev@qt.io>2021-04-21 12:52:49 +0200
committerIvan Solovev <ivan.solovev@qt.io>2021-06-15 20:25:30 +0200
commitc0716994f3a089b41b5a3d05372f4fc2fb4f51c9 (patch)
treed420ffb20ea8a41c9f2e1d47a832ed151b084eb8 /src/corelib/doc
parent320e9c762320dcece50666850feb07ae054d48f3 (diff)
Bindable property docs: mention virtual setters and getters
Update the bindable property docs to explain how to deal with virtual getters and setters. Task-number: QTBUG-92994 Pick-to: 6.2 Change-Id: I6c29011817e83623414b39afee0f39ad4cc5c1c9 Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Diffstat (limited to 'src/corelib/doc')
-rw-r--r--src/corelib/doc/src/objectmodel/bindableproperties.qdoc33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/corelib/doc/src/objectmodel/bindableproperties.qdoc b/src/corelib/doc/src/objectmodel/bindableproperties.qdoc
index 1bb20935d0..5c9685656a 100644
--- a/src/corelib/doc/src/objectmodel/bindableproperties.qdoc
+++ b/src/corelib/doc/src/objectmodel/bindableproperties.qdoc
@@ -167,6 +167,39 @@
Here, code triggered in change handlers might use the circle, while it has
the new radius, but still the old area.
+ \section1 Bindable Properties with Virtual Setters and Getters
+
+ Property setters and getters should normally be minimal and do nothing but
+ setting the property; hence it is not normally appropriate for such setters
+ and getters to be virtual. There is nothing it makes sense for the derived
+ class to do.
+
+ However some Qt classes can have properties with virtual setters. When
+ subclassing such a Qt class, overriding such setters requires special care.
+
+ In any case the base implementation \e must be called for the binding to
+ work correctly.
+
+ The following illustrates this approach.
+
+ \badcode
+ void DerivedClass::setValue(int val)
+ {
+ // do something
+ BaseClass::setValue(val);
+ // probably do something else
+ }
+ \endcode
+
+ All the common rules and recomendations regarding writing to bindable
+ properties also apply here. As soon as the base class implementation is
+ called, all the observers are notified about the change to the property.
+ This means that class invariants must be met before calling the base
+ implementation.
+
+ In the rare case where such virtual getters or setters are necessary, the
+ base class should document the requirements it imposes on overrides.
+
\section1 Formulating a Property Binding
Any C++ expression evaluating to the correct type can be used as a binding