فشل QMetaObject::invocMethod في استدعاء دالة QML/JS
سؤال
يبدو أن هذا أمر بسيط يجب القيام به، ولكن لسبب غامض بالنسبة لي يفشل.
Flickable {
objectName: "flickable"
function gotoXY(x, y) {
...
}
}
سي ++
QMetaObject::invokeMethod(flickable, "gotoXY", Q_ARG(qreal, pos.x()), Q_ARG(qreal, pos.y()));
flickable
هو QObject*
ويتم التحقق بالفعل من أنه الكائن المناسب عن طريق إخراجه objectName
.ولكن لا يمكن العثور على الطريقة:
QMetaObject::invokeMethod: No such method QQuickFlickable_QML_1::gotoXY(qreal,qreal)
أي أفكار لماذا؟
المحلول
يستبدل qreal
مع QVariant
, ، لذا اكتب شيئًا مثل هذا:
QMetaObject::invokeMethod(flickable, "gotoXY",
Q_ARG(QVariant, pos.x()),
Q_ARG(QVariant, pos.y()));
والسبب هو أن وسيطات JS مثل تلك يتم تفسيرها على أنها QVariant مع QML.جافا سكريبت ليست لغة مكتوبة بقوة، لذلك لا يوجد تعيين مباشر بين أنواع C++ (حتى المسجلة) وجافا سكريبت في حد ذاتها.
لا تنتمي إلى StackOverflow