QObjectComputedProperty 類是幫助將舊特性移植到可綁定特性係統的模闆類。 更多...
| 頭: |
#include <QObjectComputedProperty>
|
| CMake: |
find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
|
| qmake: |
QT += core
|
| Since: | Qt 6.0 |
| 繼承: | QUntypedPropertyData |
(從 6.0 起)
|
Q_OBJECT_COMPUTED_PROPERTY ( containingClass , type , name , callback ) |
QObjectComputedProperty is a read-only property which is recomputed on each read. It does not store the computed value. It is one of the Qt internal classes implementing Qt 可綁定特性 . QObjectComputedProperty is usually not used directly, instead an instance of it is created by using the Q_OBJECT_COMPUTED_PROPERTY 宏。
見以下範例。
class Client{}; class MyClassPrivate : public QObjectPrivate { public: QList<Client> clients; bool hasClientsActualCalculation() const { return clients.size() > 0; } Q_OBJECT_COMPUTED_PROPERTY(MyClassPrivate, bool, hasClientsData, &MyClassPrivate::hasClientsActualCalculation) }; class MyClass : public QObject { Q_OBJECT Q_PROPERTY(bool hasClients READ hasClients STORED false BINDABLE bindableHasClients) public: QBindable<bool> bindableHasClients() { return QBindable<bool>(&d_func()->hasClientsData); } bool hasClients() const { return d_func()->hasClientsData.value(); } void addClient(const Client &c) { Q_D(MyClass); d->clients.push_back(c); // notify that the value could have changed d->hasClientsData.notify(); } private: Q_DECLARE_PRIVATE(MyClass) };
The rules for getters in 可綁定特性 getter 和 setter also apply for QObjectComputedProperty. Especially, the getter should be trivial and only return the value of the QObjectComputedProperty object. The callback given to the QObjectComputedProperty should usually be a private method which is only called by the QObjectComputedProperty.
No setter is required or allowed, as QObjectComputedProperty is read-only.
To correctly participate in dependency handling, QObjectComputedProperty has to know when its value, the result of the callback given to it, might have changed. Whenever a bindable property used in the callback changes, this happens automatically. If the result of the callback might change because of a change in a value which is not a bindable property, it is the developer's responsibility to call
notify
on the QObjectComputedProperty object. This will inform dependent properties about the potential change.
Note that calling
notify
might trigger change handlers in dependent properties, which might in turn use the object the QObjectComputedProperty is a member of. So
notify
must not be called when in a transitional or invalid state.
QObjectComputedProperty is not suitable for use with a computation that depends on any input that might change without notice, such as the contents of a file.
另請參閱 Q_OBJECT_COMPUTED_PROPERTY , QProperty , QObjectBindableProperty , Qt 的特性係統 ,和 Qt 可綁定特性 .
[since 6.0]
Q_OBJECT_COMPUTED_PROPERTY
(
containingClass
,
type
,
name
,
callback
)
Declares a QObjectComputedProperty inside containingClass 類型 type with name name 。自變量 callback specifies a GETTER function to be called when the property is evaluated.
該宏在 Qt 6.0 引入。
另請參閱 QObjectBindableProperty , Qt 的特性係統 ,和 Qt 可綁定特性 .