diff options
author | Ivan Solovev <ivan.solovev@qt.io> | 2022-02-03 14:21:11 +0100 |
---|---|---|
committer | Ivan Solovev <ivan.solovev@qt.io> | 2022-02-11 09:19:14 +0100 |
commit | ca0c8f9f4a7ae9efab431eea38bca9f812af8751 (patch) | |
tree | 395dc6735f9e59a35cc5019cab2a785df8791f39 | |
parent | 26bb2825f6447703b1829bf266205cdf4b045762 (diff) | |
download | qtconnectivity-ca0c8f9f4a7ae9efab431eea38bca9f812af8751.tar.gz |
Fix missing MetaType registration
This patch amends bf69c830419a7cda87d6aa71c962804a946011ea.
After fixing the thread affinity issue, Qt is using QueuedConnection
for the charListObtained signal. As a result, the signal's arguments
need to be registered for the metatype system.
This patch provides such registration.
This is a 5.15-only change, as Qt 6 is does not require to register
the types explicitly.
Fixes: QTBUG-99767
Change-Id: I50e6314669bd6e779b85373f417c92b57f23a7e9
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
-rw-r--r-- | src/bluetooth/qlowenergycontroller_winrt_new.cpp | 13 | ||||
-rw-r--r-- | src/bluetooth/qlowenergyserviceprivate_p.h | 1 |
2 files changed, 14 insertions, 0 deletions
diff --git a/src/bluetooth/qlowenergycontroller_winrt_new.cpp b/src/bluetooth/qlowenergycontroller_winrt_new.cpp index b2ebab2b..19324300 100644 --- a/src/bluetooth/qlowenergycontroller_winrt_new.cpp +++ b/src/bluetooth/qlowenergycontroller_winrt_new.cpp @@ -678,10 +678,23 @@ void QWinRTLowEnergyConnectionHandler::emitConnectedAndQuitThread() QThread::currentThread()->quit(); } +static void registerServiceHandlerMetaTypes() +{ + static bool registered = false; + if (!registered) { + qRegisterMetaType<QHash<QLowEnergyHandle, QLowEnergyServicePrivate::CharData>>( + "QHash<QLowEnergyHandle, QLowEnergyServicePrivate::CharData>"); + qRegisterMetaType<QVector<QBluetoothUuid>>("QVector<QBluetoothUuid>"); + qRegisterMetaType<QLowEnergyHandle>("QLowEnergyHandle"); + registered = true; + } +} + QLowEnergyControllerPrivateWinRTNew::QLowEnergyControllerPrivateWinRTNew() : QLowEnergyControllerPrivate() { registerQLowEnergyControllerMetaType(); + registerServiceHandlerMetaTypes(); connect(this, &QLowEnergyControllerPrivateWinRTNew::characteristicChanged, this, &QLowEnergyControllerPrivateWinRTNew::handleCharacteristicChanged, Qt::QueuedConnection); diff --git a/src/bluetooth/qlowenergyserviceprivate_p.h b/src/bluetooth/qlowenergyserviceprivate_p.h index 5727d97c..b1d95597 100644 --- a/src/bluetooth/qlowenergyserviceprivate_p.h +++ b/src/bluetooth/qlowenergyserviceprivate_p.h @@ -146,5 +146,6 @@ typedef QHash<QLowEnergyHandle, QLowEnergyServicePrivate::DescData> DescriptorDa QT_END_NAMESPACE Q_DECLARE_METATYPE(QSharedPointer<QLowEnergyServicePrivate>) +Q_DECLARE_METATYPE(QLowEnergyServicePrivate::CharData) #endif // QLOWENERGYSERVICEPRIVATE_P_H |