Deprecate QPropertyAlias

That use case for the class never materialized, and it was actually
meant for internal use. However, we put it into the public header, so
we cannot remove it (and while undocumented, someone actually used it at
some point, compare e4d62651c278c468f71ce097979bc1183ffd0713).

Mark it as deprecated instead so that it can be finally be removed in Qt
7.

Change-Id: I058c5831a44610121fbec6eaddebd8b33d4a16c9
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
This commit is contained in:
Fabian Kosmale 2023-02-08 12:38:23 +01:00
parent 1dc5e20c16
commit f69bcf8d80
4 changed files with 23 additions and 2 deletions

View File

@ -641,11 +641,13 @@ QPropertyObserver::QPropertyObserver(ChangeHandler changeHandler)
d.setChangeHandler(changeHandler); d.setChangeHandler(changeHandler);
} }
#if QT_DEPRECATED_SINCE(6, 6)
QPropertyObserver::QPropertyObserver(QUntypedPropertyData *data) QPropertyObserver::QPropertyObserver(QUntypedPropertyData *data)
{ {
aliasData = data; aliasData = data;
next.setTag(ObserverIsAlias); next.setTag(ObserverIsAlias);
} }
#endif
/*! \internal /*! \internal
*/ */

View File

@ -217,7 +217,9 @@ public:
ObserverNotifiesBinding, // observer was installed to notify bindings that obsverved property changed ObserverNotifiesBinding, // observer was installed to notify bindings that obsverved property changed
ObserverNotifiesChangeHandler, // observer is a change handler, which runs on every change ObserverNotifiesChangeHandler, // observer is a change handler, which runs on every change
ObserverIsPlaceholder, // the observer before this one is currently evaluated in QPropertyObserver::notifyObservers. ObserverIsPlaceholder, // the observer before this one is currently evaluated in QPropertyObserver::notifyObservers.
#if QT_DEPRECATED_SINCE(6, 6)
ObserverIsAlias ObserverIsAlias
#endif
}; };
protected: protected:
using ChangeHandler = void (*)(QPropertyObserver*, QUntypedPropertyData *); using ChangeHandler = void (*)(QPropertyObserver*, QUntypedPropertyData *);
@ -257,7 +259,9 @@ public:
protected: protected:
QPropertyObserver(ChangeHandler changeHandler); QPropertyObserver(ChangeHandler changeHandler);
QPropertyObserver(QUntypedPropertyData *aliasedPropertyPtr); #if QT_DEPRECATED_SINCE(6, 6)
QT_DEPRECATED QPropertyObserver(QUntypedPropertyData *aliasedPropertyPtr);
#endif
QUntypedPropertyData *aliasedProperty() const QUntypedPropertyData *aliasedProperty() const
{ {
@ -867,13 +871,16 @@ public:
} }
}; };
#if QT_DEPRECATED_SINCE(6, 6)
template<typename T> template<typename T>
class QPropertyAlias : public QPropertyObserver class QT_DEPRECATED_X("Class was only meant for internal use, use a QProperty and add a binding to the target")
QPropertyAlias : public QPropertyObserver
{ {
Q_DISABLE_COPY_MOVE(QPropertyAlias) Q_DISABLE_COPY_MOVE(QPropertyAlias)
const QtPrivate::QBindableInterface *iface = nullptr; const QtPrivate::QBindableInterface *iface = nullptr;
public: public:
QT_WARNING_PUSH QT_WARNING_DISABLE_DEPRECATED
QPropertyAlias(QProperty<T> *property) QPropertyAlias(QProperty<T> *property)
: QPropertyObserver(property), : QPropertyObserver(property),
iface(&QtPrivate::QBindableInterfaceForProperty<QProperty<T>>::iface) iface(&QtPrivate::QBindableInterfaceForProperty<QProperty<T>>::iface)
@ -989,7 +996,9 @@ public:
{ {
return aliasedProperty() != nullptr; return aliasedProperty() != nullptr;
} }
QT_WARNING_POP
}; };
#endif
template<typename Class, typename T, auto Offset, auto Signal = nullptr> template<typename Class, typename T, auto Offset, auto Signal = nullptr>
class QObjectBindableProperty : public QPropertyData<T> class QObjectBindableProperty : public QPropertyData<T>

View File

@ -124,13 +124,17 @@ struct QPropertyObserverPointer
void unlink() void unlink()
{ {
unlink_common(); unlink_common();
#if QT_DEPRECATED_SINCE(6, 6)
if (ptr->next.tag() == QPropertyObserver::ObserverIsAlias) if (ptr->next.tag() == QPropertyObserver::ObserverIsAlias)
ptr->aliasData = nullptr; ptr->aliasData = nullptr;
#endif
} }
void unlink_fast() void unlink_fast()
{ {
#if QT_DEPRECATED_SINCE(6, 6)
Q_ASSERT(ptr->next.tag() != QPropertyObserver::ObserverIsAlias); Q_ASSERT(ptr->next.tag() != QPropertyObserver::ObserverIsAlias);
#endif
unlink_common(); unlink_common();
} }
@ -881,8 +885,10 @@ inline void QPropertyObserverPointer::notify(QUntypedPropertyData *propertyDataP
case QPropertyObserver::ObserverIsPlaceholder: case QPropertyObserver::ObserverIsPlaceholder:
// recursion is already properly handled somewhere else // recursion is already properly handled somewhere else
break; break;
#if QT_DEPRECATED_SINCE(6, 6)
case QPropertyObserver::ObserverIsAlias: case QPropertyObserver::ObserverIsAlias:
break; break;
#endif
default: Q_UNREACHABLE(); default: Q_UNREACHABLE();
} }
observer = next; observer = next;

View File

@ -2240,6 +2240,8 @@ void tst_QProperty::selfBindingShouldNotCrash()
void tst_QProperty::qpropertyAlias() void tst_QProperty::qpropertyAlias()
{ {
#if QT_DEPRECATED_SINCE(6, 6)
QT_WARNING_PUSH QT_WARNING_DISABLE_DEPRECATED
std::unique_ptr<QProperty<int>> i {new QProperty<int>}; std::unique_ptr<QProperty<int>> i {new QProperty<int>};
QPropertyAlias<int> alias(i.get()); QPropertyAlias<int> alias(i.get());
QVERIFY(alias.isValid()); QVERIFY(alias.isValid());
@ -2251,6 +2253,8 @@ void tst_QProperty::qpropertyAlias()
QCOMPARE(alias.value(), 42); QCOMPARE(alias.value(), 42);
i.reset(); i.reset();
QVERIFY(!alias.isValid()); QVERIFY(!alias.isValid());
QT_WARNING_POP
#endif
} }
void tst_QProperty::scheduleNotify() void tst_QProperty::scheduleNotify()