diff options
author | Ivan Solovev <ivan.solovev@qt.io> | 2021-04-21 12:52:49 +0200 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2021-06-15 18:25:39 +0000 |
commit | f55d572a5949e8f0ef0fcd605be389e97de32dca (patch) | |
tree | 70d37256373d1368a2c84994e75e82958d3ff4c2 /src/corelib/doc | |
parent | ee21938a3a274bc3094e84d0726ad494b2db4318 (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
Change-Id: I6c29011817e83623414b39afee0f39ad4cc5c1c9
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
(cherry picked from commit c0716994f3a089b41b5a3d05372f4fc2fb4f51c9)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'src/corelib/doc')
-rw-r--r-- | src/corelib/doc/src/objectmodel/bindableproperties.qdoc | 33 |
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 |