Add documentation for QPropertyBindingError
Pick-to: 6.2 Change-Id: Ia957cedb4c80cbab956d93c5f1af4d3dd5209089 Reviewed-by: Andreas Buhr <andreas.buhr@qt.io> Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
This commit is contained in:
parent
a7bb5b0245
commit
7c1230d9a8
@ -96,7 +96,7 @@ void QPropertyBindingDataPointer::addObserver(QPropertyObserver *observer)
|
|||||||
notifications.
|
notifications.
|
||||||
|
|
||||||
\sa beginPropertyUpdateGroup, endPropertyUpdateGroup
|
\sa beginPropertyUpdateGroup, endPropertyUpdateGroup
|
||||||
*/
|
*/
|
||||||
struct QPropertyDelayedNotifications
|
struct QPropertyDelayedNotifications
|
||||||
{
|
{
|
||||||
// we can't access the dynamic page size as we need a constant value
|
// we can't access the dynamic page size as we need a constant value
|
||||||
@ -219,7 +219,7 @@ static thread_local QBindingStatus bindingStatus;
|
|||||||
state.
|
state.
|
||||||
|
|
||||||
\sa Qt::endPropertyUpdateGroup
|
\sa Qt::endPropertyUpdateGroup
|
||||||
*/
|
*/
|
||||||
void Qt::beginPropertyUpdateGroup()
|
void Qt::beginPropertyUpdateGroup()
|
||||||
{
|
{
|
||||||
QPropertyDelayedNotifications *& groupUpdateData = bindingStatus.groupUpdateData;
|
QPropertyDelayedNotifications *& groupUpdateData = bindingStatus.groupUpdateData;
|
||||||
@ -239,7 +239,7 @@ void Qt::beginPropertyUpdateGroup()
|
|||||||
results in undefined behavior.
|
results in undefined behavior.
|
||||||
|
|
||||||
\sa Qt::beginPropertyUpdateGroup
|
\sa Qt::beginPropertyUpdateGroup
|
||||||
*/
|
*/
|
||||||
void Qt::endPropertyUpdateGroup()
|
void Qt::endPropertyUpdateGroup()
|
||||||
{
|
{
|
||||||
auto status = &bindingStatus;
|
auto status = &bindingStatus;
|
||||||
@ -307,8 +307,27 @@ void QPropertyBindingPrivate::notifyRecursive()
|
|||||||
updating = false;
|
updating = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Constructs a null QUntypedPropertyBinding.
|
||||||
|
|
||||||
|
\sa isNull()
|
||||||
|
*/
|
||||||
QUntypedPropertyBinding::QUntypedPropertyBinding() = default;
|
QUntypedPropertyBinding::QUntypedPropertyBinding() = default;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\fn template<typename Functor>
|
||||||
|
QUntypedPropertyBinding(QMetaType metaType, Functor &&f, const QPropertyBindingSourceLocation &location)
|
||||||
|
|
||||||
|
\internal
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\internal
|
||||||
|
|
||||||
|
Constructs QUntypedPropertyBinding. Assumes that \a metaType, \a function and \a vtable match.
|
||||||
|
Unless a specialization of \c BindingFunctionVTable is used, this function should never be called
|
||||||
|
directly.
|
||||||
|
*/
|
||||||
QUntypedPropertyBinding::QUntypedPropertyBinding(QMetaType metaType, const BindingFunctionVTable *vtable, void *function,
|
QUntypedPropertyBinding::QUntypedPropertyBinding(QMetaType metaType, const BindingFunctionVTable *vtable, void *function,
|
||||||
const QPropertyBindingSourceLocation &location)
|
const QPropertyBindingSourceLocation &location)
|
||||||
{
|
{
|
||||||
@ -317,42 +336,77 @@ QUntypedPropertyBinding::QUntypedPropertyBinding(QMetaType metaType, const Bindi
|
|||||||
vtable->moveConstruct(mem + QPropertyBindingPrivate::getSizeEnsuringAlignment(), function);
|
vtable->moveConstruct(mem + QPropertyBindingPrivate::getSizeEnsuringAlignment(), function);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Move-constructs a QUntypedPropertyBinding from \a other.
|
||||||
|
|
||||||
|
\a other is left in a null state.
|
||||||
|
\sa isNull()
|
||||||
|
*/
|
||||||
QUntypedPropertyBinding::QUntypedPropertyBinding(QUntypedPropertyBinding &&other)
|
QUntypedPropertyBinding::QUntypedPropertyBinding(QUntypedPropertyBinding &&other)
|
||||||
: d(std::move(other.d))
|
: d(std::move(other.d))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Copy-constructs a QUntypedPropertyBinding from \a other.
|
||||||
|
*/
|
||||||
QUntypedPropertyBinding::QUntypedPropertyBinding(const QUntypedPropertyBinding &other)
|
QUntypedPropertyBinding::QUntypedPropertyBinding(const QUntypedPropertyBinding &other)
|
||||||
: d(other.d)
|
: d(other.d)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Copy-assigns \a other to this QUntypedPropertyBinding.
|
||||||
|
*/
|
||||||
QUntypedPropertyBinding &QUntypedPropertyBinding::operator=(const QUntypedPropertyBinding &other)
|
QUntypedPropertyBinding &QUntypedPropertyBinding::operator=(const QUntypedPropertyBinding &other)
|
||||||
{
|
{
|
||||||
d = other.d;
|
d = other.d;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Move-assigns \a other to this QUntypedPropertyBinding.
|
||||||
|
|
||||||
|
\a other is left in a null state.
|
||||||
|
\sa isNull
|
||||||
|
*/
|
||||||
QUntypedPropertyBinding &QUntypedPropertyBinding::operator=(QUntypedPropertyBinding &&other)
|
QUntypedPropertyBinding &QUntypedPropertyBinding::operator=(QUntypedPropertyBinding &&other)
|
||||||
{
|
{
|
||||||
d = std::move(other.d);
|
d = std::move(other.d);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\internal
|
||||||
|
*/
|
||||||
QUntypedPropertyBinding::QUntypedPropertyBinding(QPropertyBindingPrivate *priv)
|
QUntypedPropertyBinding::QUntypedPropertyBinding(QPropertyBindingPrivate *priv)
|
||||||
: d(priv)
|
: d(priv)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Destroys the QUntypedPropertyBinding.
|
||||||
|
*/
|
||||||
QUntypedPropertyBinding::~QUntypedPropertyBinding()
|
QUntypedPropertyBinding::~QUntypedPropertyBinding()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Returns \c true if the \c QUntypedPropertyBinding is null.
|
||||||
|
This is only true for default-constructed and moved-from instances.
|
||||||
|
|
||||||
|
\sa isNull()
|
||||||
|
*/
|
||||||
bool QUntypedPropertyBinding::isNull() const
|
bool QUntypedPropertyBinding::isNull() const
|
||||||
{
|
{
|
||||||
return !d;
|
return !d;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Returns the error state of the binding.
|
||||||
|
|
||||||
|
\sa QPropertyBindingError
|
||||||
|
*/
|
||||||
QPropertyBindingError QUntypedPropertyBinding::error() const
|
QPropertyBindingError QUntypedPropertyBinding::error() const
|
||||||
{
|
{
|
||||||
if (!d)
|
if (!d)
|
||||||
@ -360,6 +414,10 @@ QPropertyBindingError QUntypedPropertyBinding::error() const
|
|||||||
return static_cast<QPropertyBindingPrivate *>(d.get())->bindingError();
|
return static_cast<QPropertyBindingPrivate *>(d.get())->bindingError();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Returns the meta-type of the binding.
|
||||||
|
If the QUntypedProperyBinding is null, an invalid QMetaType is returned.
|
||||||
|
*/
|
||||||
QMetaType QUntypedPropertyBinding::valueMetaType() const
|
QMetaType QUntypedPropertyBinding::valueMetaType() const
|
||||||
{
|
{
|
||||||
if (!d)
|
if (!d)
|
||||||
@ -565,7 +623,7 @@ QPropertyObserver::QPropertyObserver(QUntypedPropertyData *data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*! \internal
|
/*! \internal
|
||||||
*/
|
*/
|
||||||
void QPropertyObserver::setSource(const QPropertyBindingData &property)
|
void QPropertyObserver::setSource(const QPropertyBindingData &property)
|
||||||
{
|
{
|
||||||
QPropertyObserverPointer d{this};
|
QPropertyObserverPointer d{this};
|
||||||
@ -695,7 +753,7 @@ struct [[nodiscard]] QPropertyObserverNodeProtector {
|
|||||||
|
|
||||||
/*! \internal
|
/*! \internal
|
||||||
\a propertyDataPtr is a pointer to the observed property's property data
|
\a propertyDataPtr is a pointer to the observed property's property data
|
||||||
*/
|
*/
|
||||||
void QPropertyObserverPointer::notify(QUntypedPropertyData *propertyDataPtr)
|
void QPropertyObserverPointer::notify(QUntypedPropertyData *propertyDataPtr)
|
||||||
{
|
{
|
||||||
auto observer = const_cast<QPropertyObserver*>(ptr);
|
auto observer = const_cast<QPropertyObserver*>(ptr);
|
||||||
@ -779,7 +837,7 @@ void QPropertyObserverPointer::evaluateBindings(QBindingStatus *status)
|
|||||||
QPropertyObserver *next = observer->next.data();
|
QPropertyObserver *next = observer->next.data();
|
||||||
|
|
||||||
if (QPropertyObserver::ObserverTag(observer->next.tag()) == QPropertyObserver::ObserverNotifiesBinding) {
|
if (QPropertyObserver::ObserverTag(observer->next.tag()) == QPropertyObserver::ObserverNotifiesBinding) {
|
||||||
auto bindingToEvaluate = observer->binding;
|
auto bindingToEvaluate = observer->binding;
|
||||||
QPropertyObserverNodeProtector protector(observer);
|
QPropertyObserverNodeProtector protector(observer);
|
||||||
bindingToEvaluate->evaluateRecursive_inline(status);
|
bindingToEvaluate->evaluateRecursive_inline(status);
|
||||||
next = protector.next();
|
next = protector.next();
|
||||||
@ -796,10 +854,61 @@ void QPropertyObserverPointer::observeProperty(QPropertyBindingDataPointer prope
|
|||||||
property.addObserver(ptr);
|
property.addObserver(ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\class QPropertyBindingError
|
||||||
|
\inmodule QtCore
|
||||||
|
\ingroup tools
|
||||||
|
\since 6.0
|
||||||
|
|
||||||
|
QPropertyBindingError is used by \l{The Property System}{the property
|
||||||
|
system} to report errors that occurred when a binding was evaluated. Use \l
|
||||||
|
type() to query which error occurred, and \l
|
||||||
|
description() to extract an error message which might contain
|
||||||
|
more details.
|
||||||
|
If there is no error, QPropertyBindingError has type
|
||||||
|
\c QPropertyBindingError::NoError and \c hasError() returns false.
|
||||||
|
|
||||||
|
\code
|
||||||
|
extern QProperty<int> prop;
|
||||||
|
|
||||||
|
QPropertyBindingError error = prop.binding().error();
|
||||||
|
if (error.hasError())
|
||||||
|
qDebug() << error.description();
|
||||||
|
\endcode
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\enum QPropertyBindingError::Type
|
||||||
|
|
||||||
|
This enum specifies which error occurred.
|
||||||
|
|
||||||
|
\value NoError
|
||||||
|
No error occurred while evaluating the binding.
|
||||||
|
\value BindingLoop
|
||||||
|
Binding evaluation was stopped because a property depended on its own
|
||||||
|
value.
|
||||||
|
\value EvaluationError
|
||||||
|
Binding evaluation was stopped for any other reason than a binding loop.
|
||||||
|
For example, this value is used in the QML engine when an exception occurs
|
||||||
|
while a binding is evaluated.
|
||||||
|
\value UnknownError
|
||||||
|
A generic error type used when neither of the other values is suitable.
|
||||||
|
Calling \l description() might provide details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Default constructs QPropertyBindingError.
|
||||||
|
hasError() will return false, type will return \c NoError and
|
||||||
|
\l description() will return an empty string.
|
||||||
|
*/
|
||||||
QPropertyBindingError::QPropertyBindingError()
|
QPropertyBindingError::QPropertyBindingError()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Constructs a QPropertyBindingError of type \a type with \a description as its
|
||||||
|
description.
|
||||||
|
*/
|
||||||
QPropertyBindingError::QPropertyBindingError(Type type, const QString &description)
|
QPropertyBindingError::QPropertyBindingError(Type type, const QString &description)
|
||||||
{
|
{
|
||||||
if (type != NoError) {
|
if (type != NoError) {
|
||||||
@ -809,32 +918,54 @@ QPropertyBindingError::QPropertyBindingError(Type type, const QString &descripti
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Copy-constructs QPropertyBindingError from \a other.
|
||||||
|
*/
|
||||||
QPropertyBindingError::QPropertyBindingError(const QPropertyBindingError &other)
|
QPropertyBindingError::QPropertyBindingError(const QPropertyBindingError &other)
|
||||||
: d(other.d)
|
: d(other.d)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Copies \a other to this QPropertyBindingError.
|
||||||
|
*/
|
||||||
QPropertyBindingError &QPropertyBindingError::operator=(const QPropertyBindingError &other)
|
QPropertyBindingError &QPropertyBindingError::operator=(const QPropertyBindingError &other)
|
||||||
{
|
{
|
||||||
d = other.d;
|
d = other.d;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Move-constructs QPropertyBindingError from \a other.
|
||||||
|
\a other will be left in its default state.
|
||||||
|
*/
|
||||||
QPropertyBindingError::QPropertyBindingError(QPropertyBindingError &&other)
|
QPropertyBindingError::QPropertyBindingError(QPropertyBindingError &&other)
|
||||||
: d(std::move(other.d))
|
: d(std::move(other.d))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Move-assigns \a other to this QPropertyBindingError.
|
||||||
|
\a other will be left in its default state.
|
||||||
|
*/
|
||||||
QPropertyBindingError &QPropertyBindingError::operator=(QPropertyBindingError &&other)
|
QPropertyBindingError &QPropertyBindingError::operator=(QPropertyBindingError &&other)
|
||||||
{
|
{
|
||||||
d = std::move(other.d);
|
d = std::move(other.d);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Destroys the QPropertyBindingError.
|
||||||
|
*/
|
||||||
QPropertyBindingError::~QPropertyBindingError()
|
QPropertyBindingError::~QPropertyBindingError()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Returns the type of the QPropertyBindingError.
|
||||||
|
|
||||||
|
\sa QPropertyBindingError::Type
|
||||||
|
*/
|
||||||
QPropertyBindingError::Type QPropertyBindingError::type() const
|
QPropertyBindingError::Type QPropertyBindingError::type() const
|
||||||
{
|
{
|
||||||
if (!d)
|
if (!d)
|
||||||
@ -842,6 +973,10 @@ QPropertyBindingError::Type QPropertyBindingError::type() const
|
|||||||
return d->type;
|
return d->type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Returns a descriptive error message for the QPropertyBindingError if
|
||||||
|
it has been set.
|
||||||
|
*/
|
||||||
QString QPropertyBindingError::description() const
|
QString QPropertyBindingError::description() const
|
||||||
{
|
{
|
||||||
if (!d)
|
if (!d)
|
||||||
@ -923,21 +1058,21 @@ QString QPropertyBindingError::description() const
|
|||||||
will be invalid.
|
will be invalid.
|
||||||
|
|
||||||
\sa isValid(), isReadOnly()
|
\sa isValid(), isReadOnly()
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\fn bool QUntypedBindable::isValid() const
|
\fn bool QUntypedBindable::isValid() const
|
||||||
|
|
||||||
Returns true if the QUntypedBindable is valid. Methods called on an invalid
|
Returns true if the QUntypedBindable is valid. Methods called on an invalid
|
||||||
QUntypedBindable generally have no effect, unless otherwise noted.
|
QUntypedBindable generally have no effect, unless otherwise noted.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\fn bool QUntypedBindable::isReadOnly() const
|
\fn bool QUntypedBindable::isReadOnly() const
|
||||||
\since 6.1
|
\since 6.1
|
||||||
|
|
||||||
Returns true if the QUntypedBindable is read-only.
|
Returns true if the QUntypedBindable is read-only.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\fn bool QUntypedBindable::isBindable() const
|
\fn bool QUntypedBindable::isBindable() const
|
||||||
@ -949,7 +1084,7 @@ QString QPropertyBindingError::description() const
|
|||||||
false.
|
false.
|
||||||
|
|
||||||
\sa isReadOnly()
|
\sa isReadOnly()
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\fn QUntypedPropertyBinding QUntypedBindable::makeBinding(const QPropertyBindingSourceLocation &location) const
|
\fn QUntypedPropertyBinding QUntypedBindable::makeBinding(const QPropertyBindingSourceLocation &location) const
|
||||||
@ -2259,7 +2394,7 @@ void restoreBindingStatus(BindingEvaluationState *status)
|
|||||||
of extra data for a QPropertyBindingStorage in a getter.
|
of extra data for a QPropertyBindingStorage in a getter.
|
||||||
Note that this function accesses TLS storage, and is therefore soemwhat
|
Note that this function accesses TLS storage, and is therefore soemwhat
|
||||||
costly to call.
|
costly to call.
|
||||||
*/
|
*/
|
||||||
bool isAnyBindingEvaluating()
|
bool isAnyBindingEvaluating()
|
||||||
{
|
{
|
||||||
return bindingStatus.currentlyEvaluatingBinding != nullptr;
|
return bindingStatus.currentlyEvaluatingBinding != nullptr;
|
||||||
|
Loading…
Reference in New Issue
Block a user