سؤال

يبدو أن هذا أمر بسيط يجب القيام به، ولكن لسبب غامض بالنسبة لي يفشل.

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++ (حتى المسجلة) وجافا سكريبت في حد ذاتها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top