diff options
author | Lars Schmertmann <Lars.Schmertmann@governikus.de> | 2018-06-20 11:56:19 +0200 |
---|---|---|
committer | Lars Schmertmann <lars.schmertmann@governikus.de> | 2018-07-17 15:09:29 +0000 |
commit | 0df6eb94d989246dd0516a474266b9f562fca2f3 (patch) | |
tree | d0f639580aa79a6c57e2e25248cccc72e7e90a78 | |
parent | defb24004e9afcbe42d36b445151c2e842d59fba (diff) |
Introduce reportError to fix "QMetaObject::invokeMethod: No such method"
Task-number: QTBUG-67958
Change-Id: Ia5a21cb19f0318844ac436adcc3f0fff9a3185b5
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
-rw-r--r-- | src/nfc/qnearfieldtagtype1.cpp | 8 | ||||
-rw-r--r-- | src/nfc/qnearfieldtarget.cpp | 13 | ||||
-rw-r--r-- | src/nfc/qnearfieldtarget.h | 2 | ||||
-rw-r--r-- | src/nfc/qnearfieldtarget_android.cpp | 36 | ||||
-rw-r--r-- | src/nfc/qnearfieldtarget_emulator.cpp | 20 | ||||
-rw-r--r-- | src/nfc/qnearfieldtarget_neard_p.h | 8 |
6 files changed, 33 insertions, 54 deletions
diff --git a/src/nfc/qnearfieldtagtype1.cpp b/src/nfc/qnearfieldtagtype1.cpp index 34f2c8b8..7f27fbe9 100644 --- a/src/nfc/qnearfieldtagtype1.cpp +++ b/src/nfc/qnearfieldtagtype1.cpp @@ -440,9 +440,7 @@ QNearFieldTarget::RequestId QNearFieldTagType1::readNdefMessages() if (d->m_readNdefMessageState == QNearFieldTagType1Private::NotReadingNdefMessage) { d->progressToNextNdefReadMessageState(); } else { - QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection, - Q_ARG(QNearFieldTarget::Error, NdefReadError), - Q_ARG(QNearFieldTarget::RequestId, d->m_readNdefRequestId)); + reportError(QNearFieldTarget::NdefReadError, d->m_readNdefRequestId); } return d->m_readNdefRequestId; @@ -462,9 +460,7 @@ QNearFieldTarget::RequestId QNearFieldTagType1::writeNdefMessages(const QList<QN d->m_ndefWriteMessages = messages; d->progressToNextNdefWriteMessageState(); } else { - QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection, - Q_ARG(QNearFieldTarget::Error, NdefWriteError), - Q_ARG(QNearFieldTarget::RequestId, d->m_readNdefRequestId)); + reportError(QNearFieldTarget::NdefWriteError, d->m_readNdefRequestId); } return d->m_writeNdefRequestId; diff --git a/src/nfc/qnearfieldtarget.cpp b/src/nfc/qnearfieldtarget.cpp index e642824b..e9a6fa11 100644 --- a/src/nfc/qnearfieldtarget.cpp +++ b/src/nfc/qnearfieldtarget.cpp @@ -530,4 +530,17 @@ bool QNearFieldTarget::handleResponse(const QNearFieldTarget::RequestId &id, return true; } +/*! + \since 5.12 + + Reports the \a error for the request \a id by appending the signal emission to the event queue. +*/ +void QNearFieldTarget::reportError(QNearFieldTarget::Error error, + const QNearFieldTarget::RequestId &id) +{ + QMetaObject::invokeMethod(this, [this, error, id]() { + Q_EMIT this->error(error, id); + }, Qt::QueuedConnection); +} + QT_END_NAMESPACE diff --git a/src/nfc/qnearfieldtarget.h b/src/nfc/qnearfieldtarget.h index e51960f7..868b52d5 100644 --- a/src/nfc/qnearfieldtarget.h +++ b/src/nfc/qnearfieldtarget.h @@ -153,6 +153,8 @@ protected: Q_INVOKABLE virtual bool handleResponse(const QNearFieldTarget::RequestId &id, const QByteArray &response); + void reportError(QNearFieldTarget::Error error, const QNearFieldTarget::RequestId &id); + Q_SIGNALS: void disconnected(); diff --git a/src/nfc/qnearfieldtarget_android.cpp b/src/nfc/qnearfieldtarget_android.cpp index 30b2eeca..5ba48fa6 100644 --- a/src/nfc/qnearfieldtarget_android.cpp +++ b/src/nfc/qnearfieldtarget_android.cpp @@ -147,25 +147,19 @@ QNearFieldTarget::RequestId NearFieldTarget::readNdefMessages() // Making sure that target is still in range QNearFieldTarget::RequestId requestId(new QNearFieldTarget::RequestIdPrivate); if (!m_intent.isValid()) { - QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection, - Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::TargetOutOfRangeError), - Q_ARG(QNearFieldTarget::RequestId&, requestId)); + reportError(QNearFieldTarget::TargetOutOfRangeError, requestId); return requestId; } // Getting Ndef technology object if (!setTagTechnology({NDEFTECHNOLOGY})) { - QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection, - Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::UnsupportedError), - Q_ARG(QNearFieldTarget::RequestId&, requestId)); + reportError(QNearFieldTarget::UnsupportedError, requestId); return requestId; } // Connect if (!connect()) { - QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection, - Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::TargetOutOfRangeError), - Q_ARG(QNearFieldTarget::RequestId&, requestId)); + reportError(QNearFieldTarget::TargetOutOfRangeError, requestId); return requestId; } @@ -174,9 +168,7 @@ QNearFieldTarget::RequestId NearFieldTarget::readNdefMessages() if (catchJavaExceptions()) ndefMessage = QAndroidJniObject(); if (!ndefMessage.isValid()) { - QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection, - Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::NdefReadError), - Q_ARG(QNearFieldTarget::RequestId&, requestId)); + reportError(QNearFieldTarget::NdefReadError, requestId); return requestId; } @@ -246,9 +238,7 @@ QNearFieldTarget::RequestId NearFieldTarget::sendCommand(const QByteArray &comma // Connecting QNearFieldTarget::RequestId requestId = QNearFieldTarget::RequestId(new QNearFieldTarget::RequestIdPrivate()); if (!connect()) { - QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection, - Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::TargetOutOfRangeError), - Q_ARG(QNearFieldTarget::RequestId&, requestId)); + reportError(QNearFieldTarget::TargetOutOfRangeError, requestId); return requestId; } @@ -260,9 +250,7 @@ QNearFieldTarget::RequestId NearFieldTarget::sendCommand(const QByteArray &comma // Writing QAndroidJniObject myNewVal = m_tagTech.callObjectMethod("transceive", "([B)[B", jba); if (catchJavaExceptions()) { - QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection, - Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::CommandError), - Q_ARG(QNearFieldTarget::RequestId&, requestId)); + reportError(QNearFieldTarget::CommandError, requestId); return requestId; } QByteArray result = jbyteArrayToQByteArray(myNewVal.object<jbyteArray>()); @@ -312,9 +300,7 @@ QNearFieldTarget::RequestId NearFieldTarget::writeNdefMessages(const QList<QNdef // Connecting QNearFieldTarget::RequestId requestId = QNearFieldTarget::RequestId(new QNearFieldTarget::RequestIdPrivate()); if (!connect()) { - QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection, - Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::TargetOutOfRangeError), - Q_ARG(QNearFieldTarget::RequestId&, requestId)); + reportError(QNearFieldTarget::TargetOutOfRangeError, requestId); return requestId; } @@ -325,18 +311,14 @@ QNearFieldTarget::RequestId NearFieldTarget::writeNdefMessages(const QList<QNdef env->SetByteArrayRegion(jba.object<jbyteArray>(), 0, ba.size(), reinterpret_cast<jbyte*>(ba.data())); QAndroidJniObject jmessage = QAndroidJniObject("android/nfc/NdefMessage", "([B)V", jba.object<jbyteArray>()); if (catchJavaExceptions()) { - QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection, - Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::UnknownError), - Q_ARG(QNearFieldTarget::RequestId&, requestId)); + reportError(QNearFieldTarget::UnknownError, requestId); return requestId; } // Writing m_tagTech.callMethod<void>(writeMethod, "(Landroid/nfc/NdefMessage;)V", jmessage.object<jobject>()); if (catchJavaExceptions()) { - QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection, - Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::NdefWriteError), - Q_ARG(QNearFieldTarget::RequestId&, requestId)); + reportError(QNearFieldTarget::NdefWriteError, requestId); return requestId; } diff --git a/src/nfc/qnearfieldtarget_emulator.cpp b/src/nfc/qnearfieldtarget_emulator.cpp index 29b1f74d..030718cc 100644 --- a/src/nfc/qnearfieldtarget_emulator.cpp +++ b/src/nfc/qnearfieldtarget_emulator.cpp @@ -82,9 +82,7 @@ QNearFieldTarget::RequestId TagType1::sendCommand(const QByteArray &command) // tag not in proximity if (!tagMap.value(m_tag)) { - QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection, - Q_ARG(QNearFieldTarget::Error, TargetOutOfRangeError), - Q_ARG(QNearFieldTarget::RequestId, id)); + reportError(QNearFieldTarget::TargetOutOfRangeError, id); return id; } @@ -93,17 +91,13 @@ QNearFieldTarget::RequestId TagType1::sendCommand(const QByteArray &command) QByteArray response = m_tag->processCommand(command + char(crc & 0xff) + char(crc >> 8)); if (response.isEmpty()) { - QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection, - Q_ARG(QNearFieldTarget::Error, NoResponseError), - Q_ARG(QNearFieldTarget::RequestId, id)); + reportError(QNearFieldTarget::NoResponseError, id); return id; } // check crc if (qChecksum(response.constData(), response.length(), Qt::ChecksumItuV41) != 0) { - QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection, - Q_ARG(QNearFieldTarget::Error, ChecksumMismatchError), - Q_ARG(QNearFieldTarget::RequestId, id)); + reportError(QNearFieldTarget::ChecksumMismatchError, id); return id; } @@ -152,9 +146,7 @@ QNearFieldTarget::RequestId TagType2::sendCommand(const QByteArray &command) // tag not in proximity if (!tagMap.value(m_tag)) { - QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection, - Q_ARG(QNearFieldTarget::Error, TargetOutOfRangeError), - Q_ARG(QNearFieldTarget::RequestId, id)); + reportError(QNearFieldTarget::TargetOutOfRangeError, id); return id; } @@ -168,9 +160,7 @@ QNearFieldTarget::RequestId TagType2::sendCommand(const QByteArray &command) if (response.length() > 1) { // check crc if (qChecksum(response.constData(), response.length(), Qt::ChecksumItuV41) != 0) { - QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection, - Q_ARG(QNearFieldTarget::Error, ChecksumMismatchError), - Q_ARG(QNearFieldTarget::RequestId, id)); + reportError(QNearFieldTarget::ChecksumMismatchError, id); return id; } diff --git a/src/nfc/qnearfieldtarget_neard_p.h b/src/nfc/qnearfieldtarget_neard_p.h index 053df141..625cee67 100644 --- a/src/nfc/qnearfieldtarget_neard_p.h +++ b/src/nfc/qnearfieldtarget_neard_p.h @@ -359,9 +359,7 @@ private: Q_EMIT this->requestCompleted(this->m_currentReadRequestId); }, Qt::QueuedConnection); } else { - QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection, - Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::UnknownError), - Q_ARG(QNearFieldTarget::RequestId, m_currentReadRequestId)); + this->reportError(QNearFieldTarget::UnknownError, m_currentReadRequestId); } m_readRequested = false; @@ -389,9 +387,7 @@ private: reply.waitForFinished(); if (reply.isError()) { qCWarning(QT_NFC_NEARD) << "Error writing to NFC tag" << reply.error(); - QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection, - Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::UnknownError), - Q_ARG(QNearFieldTarget::RequestId, m_currentWriteRequestId)); + this->reportError(QNearFieldTarget::UnknownError, m_currentWriteRequestId); } QMetaObject::invokeMethod(this, "ndefMessagesWritten", Qt::QueuedConnection); |