Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-88493

QML call override function in super class or derived type of QQmlPropertyMap, arguments match bad

    XMLWordPrintable

Details

    • All

    Description

       MyType for QML

      class MyType3 : public QQmlPropertyMap
      {
          Q_OBJECT
      
      public:
          MyType3() : QQmlPropertyMap(this, nullptr)
          {
              insert("a", 1);
              insert("b", 2);
          }
      
          Q_INVOKABLE void func(QString s)
          {
              qDebug() << this << "MyType3::func(QString) called!" << s;
          }
      
          Q_INVOKABLE void func(int i)
          {
              qDebug() << this << "MyType3::func(int) called!" << i;
          }
      
          Q_INVOKABLE void func()
          {
              qDebug() << this << "MyType3::func() called!";
          }
      
          Q_INVOKABLE void call(const QString &funcName,
                                const QVariant &v0 = QVariant(), const QVariant &v1 = QVariant(),
                                const QVariant &v2 = QVariant(), const QVariant &v3 = QVariant(),
                                const QVariant &v4 = QVariant(), const QVariant &v5 = QVariant(),
                                const QVariant &v6 = QVariant(), const QVariant &v7 = QVariant(),
                                const QVariant &v8 = QVariant(), const QVariant &v9 = QVariant())
          {
              qDebug() << this << "MyType3::call" << funcName << v0 << v1 << v2 << v3 << v4 << v5 << v6 << v7 << v8 << v9;
          }
      };
      

      Calls in QML

      MyObj3.func("hehe");
      MyObj3.func(1);
      MyObj3.func(4.5);
      MyObj3.call("doSomething", "haha", 1, 2.3)
      MyObj3.call("doSomething", "haha", 1, 2.3, 4.56, 78, "bye")prints
      

      prints

      MyType3(0x6ffe00) MyType3::func() called!
      MyType3(0x6ffe00) MyType3::func() called!
      MyType3(0x6ffe00) MyType3::func() called!
      MyType3(0x6ffe00) MyType3::call "doSomething" QVariant(Invalid) QVariant(Invalid) QVariant(Invalid) QVariant(Invalid) QVariant(Invalid) QVariant(Invalid) QVariant(Invalid) QVariant(Invalid) QVariant(Invalid) QVariant(Invalid)
      MyType3(0x6ffe00) MyType3::call "doSomething" QVariant(Invalid) QVariant(Invalid) QVariant(Invalid) QVariant(Invalid) QVariant(Invalid) QVariant(Invalid) QVariant(Invalid) QVariant(Invalid) QVariant(Invalid) QVariant(Invalid
      

      For the class not derived from QQMLPropertyMap, matches fine. 

      MyType1(0x6ffe10) MyType1::func(QString) called! "hehe"
      MyType1(0x6ffe10) MyType1::func(int) called! 1
      MyType1(0x6ffe10) MyType1::func(int) called! 4
      MyType1(0x6ffe10) MyType1::call "doSomething" QVariant(QString, "haha") QVariant(int, 1) QVariant(double, 2.3) QVariant(Invalid) QVariant(Invalid) QVariant(Invalid) QVariant(Invalid) QVariant(Invalid) QVariant(Invalid) QVariant(Invalid)
      MyType1(0x6ffe10) MyType1::call "doSomething" QVariant(QString, "haha") QVariant(int, 1) QVariant(double, 2.3) QVariant(double, 4.56) QVariant(int, 78) QVariant(QString, "bye") QVariant(Invalid) QVariant(Invalid) QVariant(Invalid) QVariant(Invalid)
      

      I guess the Javascript engine is not doing matches in methods of superClass metaObject for override functions. The problems may be related with the file qv4qobjectwrapper.cpp, function callInternal.

       

       

       

      Attachments

        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

        Activity

          People

            qtqmlteam Qt Qml Team User
            sfaker jun chen
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Gerrit Reviews

                There are no open Gerrit changes