From 40cbafcf8fe28e5fc5f38eb7871c9d3ee657f03f Mon Sep 17 00:00:00 2001 From: Robert Lv Date: Fri, 6 Sep 2024 15:40:48 +0800 Subject: [PATCH] fix: DDBusInterface signal loss Fix the issue of no signal when DDBusInterface object properties change --- src/util/ddbusinterface.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/util/ddbusinterface.cpp b/src/util/ddbusinterface.cpp index b761130..73cb304 100644 --- a/src/util/ddbusinterface.cpp +++ b/src/util/ddbusinterface.cpp @@ -114,16 +114,16 @@ void DDBusInterfacePrivate::updateProp(const char *propName, const QVariant &val #endif } QByteArray baSignal = QStringLiteral("%1Changed(%2)").arg(propName).arg(typeName).toLatin1(); - QByteArray baSignalName = QStringLiteral("%1Changed").arg(propName).toLatin1(); - const char *signal = baSignal.data(); - const char *signalName = baSignalName.data(); - int i = metaObj->indexOfSignal(signal); + int i = metaObj->indexOfSignal(baSignal.data()); if (i != -1) { - QMetaObject::invokeMethod(m_parent, signalName, Qt::DirectConnection, QGenericArgument(typeName, data)); + auto method = metaObj->method(i); + if (method.parameterCount() == 1) { + method.invoke(m_parent, Qt::DirectConnection, QGenericArgument(method.parameterTypes().first(), data)); + } else { + method.invoke(m_parent, Qt::DirectConnection); + } } else { - qDebug() << "It's not exist the property:[" << propName <<"] for parent:" << m_parent - << ", interface:" << q_ptr->interface() - << ", and It's changed value is:" << value; + qDebug() << "It's not exist the property:[" << propName << "] for parent:" << m_parent << ", interface:" << q_ptr->interface() << ", and It's changed value is:" << value; } }