diff options
author | Ivan Solovev <ivan.solovev@qt.io> | 2021-04-21 12:52:49 +0200 |
---|---|---|
committer | Ivan Solovev <ivan.solovev@qt.io> | 2021-06-15 20:25:30 +0200 |
commit | c0716994f3a089b41b5a3d05372f4fc2fb4f51c9 (patch) | |
tree | d420ffb20ea8a41c9f2e1d47a832ed151b084eb8 /src/corelib/doc | |
parent | 320e9c762320dcece50666850feb07ae054d48f3 (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.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 |