Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. QML and Qt Quick
  4. How to Pass the object from QML to CPP file?
Forum Updated to NodeBB v4.3 + New Features

How to Pass the object from QML to CPP file?

Scheduled Pinned Locked Moved Unsolved QML and Qt Quick
qmlqml binding
3 Posts 2 Posters 3.9k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Offline
    M Offline
    Mathan M
    wrote on 29 Jul 2016, 15:34 last edited by
    #1

    Hi,
    I am developing an app.
    Query:
    How to pass the object from QML to CPP file, what will be object type in QT?

    Code:
    Login.QML
    function metPassObject()
    {

    var myCar = new Object();
    myCar.make = "Ford";
    myCar.model = "Mustang"
    myCar.year = 1969;

    objQtCPPSearchVOne.metPassObject(myCar);

    }

    .H file:
    Q_INVOKABLE void metPassObject (type parameter)- what will be the parameter type?

    .CPP file:
    void metPassObject(type parameter)
    {
    //How to access the object?
    }

    I am an .Net/C# guy, So my approach is based on that. Am I doing right code or If I am wrong, Pls correct me with concept.

    Thanks is Advance.

    M 1 Reply Last reply 29 Jul 2016, 18:19
    0
    • M Mathan M
      29 Jul 2016, 15:34

      Hi,
      I am developing an app.
      Query:
      How to pass the object from QML to CPP file, what will be object type in QT?

      Code:
      Login.QML
      function metPassObject()
      {

      var myCar = new Object();
      myCar.make = "Ford";
      myCar.model = "Mustang"
      myCar.year = 1969;

      objQtCPPSearchVOne.metPassObject(myCar);

      }

      .H file:
      Q_INVOKABLE void metPassObject (type parameter)- what will be the parameter type?

      .CPP file:
      void metPassObject(type parameter)
      {
      //How to access the object?
      }

      I am an .Net/C# guy, So my approach is based on that. Am I doing right code or If I am wrong, Pls correct me with concept.

      Thanks is Advance.

      M Offline
      M Offline
      medyakovvit
      wrote on 29 Jul 2016, 18:19 last edited by
      #2

      @Mathan-M I think, there are different ways for that, some of them:

      #1
      use QVariantMap on C++ side:
      Qml:

      function metPassObject()
      {
          var myCar = {make: "Ford"; model: "Mustang"; year: 1969};
          objQtCPPSearchVOne.metPassObject(myCar);
      }
      

      C++:

      Q_INVOKABLE void metPassObject (QVariantMap carMap){
          qDebug() << varMap.value("make").toString();
          qDebug() << varMap.value("model").toString();
          qDebug() << varMap.value("year").toInt();
      }
      

      #2
      Create C++ class derived from QObject with Q_PROPERTY. And register it to qml with qmlRegisterType():

      Car class:

      class Car : public QObject
      {
          Q_OBJECT
          Q_PROPERTY(QString make READ make WRITE setMake NOTIFY makeChanged)
          Q_PROPERTY(QString model READ model WRITE setModel NOTIFY modelChanged)
          Q_PROPERTY(int year READ year WRITE setYear NOTIFY yearChanged)
      
      //...
      // defining of setters, getters, signals, and data members for properies
      //...
      }
      

      Then, maybe somewhere in main.cpp:

      qmlRegisterType<Car>("my.car", 1, 0, "Car");
      

      Create car dynamically on qml side:

      function metPassObject()
      {
         var aCar = Qt.createQmlObject('import my.car1.0; Car{make: "Ford"; model:"Mustang"; year: 1969}', repeaterModel, "");
           objQtCPPSearchVOne.metPassObject(myCar);
      }
      

      and in C++ side:

      Q_INVOKABLE void metPassObject (Car* aCar){
          qDebug() << "Make: " << aCar->make();
          qDebug() << "Model: " << aCar->model();
          qDebug() << "year: " << aCar->year();
      }
      

      #3
      Send simpl types like string and int to C++ from Qml:

      Qml:

      function metPassObject()
      {
           objQtCPPSearchVOne.metPassObject("Ford", "Mustang", 1969);
      }
      

      And C++:

      Q_INVOKABLE void metPassObject (QString aMake, QString aModel, int aYear){
          Car* myCar = new Car(aMake, aModel, aYear);
          //...do smthg
      }
      
      M 1 Reply Last reply 30 Jul 2016, 08:42
      0
      • M medyakovvit
        29 Jul 2016, 18:19

        @Mathan-M I think, there are different ways for that, some of them:

        #1
        use QVariantMap on C++ side:
        Qml:

        function metPassObject()
        {
            var myCar = {make: "Ford"; model: "Mustang"; year: 1969};
            objQtCPPSearchVOne.metPassObject(myCar);
        }
        

        C++:

        Q_INVOKABLE void metPassObject (QVariantMap carMap){
            qDebug() << varMap.value("make").toString();
            qDebug() << varMap.value("model").toString();
            qDebug() << varMap.value("year").toInt();
        }
        

        #2
        Create C++ class derived from QObject with Q_PROPERTY. And register it to qml with qmlRegisterType():

        Car class:

        class Car : public QObject
        {
            Q_OBJECT
            Q_PROPERTY(QString make READ make WRITE setMake NOTIFY makeChanged)
            Q_PROPERTY(QString model READ model WRITE setModel NOTIFY modelChanged)
            Q_PROPERTY(int year READ year WRITE setYear NOTIFY yearChanged)
        
        //...
        // defining of setters, getters, signals, and data members for properies
        //...
        }
        

        Then, maybe somewhere in main.cpp:

        qmlRegisterType<Car>("my.car", 1, 0, "Car");
        

        Create car dynamically on qml side:

        function metPassObject()
        {
           var aCar = Qt.createQmlObject('import my.car1.0; Car{make: "Ford"; model:"Mustang"; year: 1969}', repeaterModel, "");
             objQtCPPSearchVOne.metPassObject(myCar);
        }
        

        and in C++ side:

        Q_INVOKABLE void metPassObject (Car* aCar){
            qDebug() << "Make: " << aCar->make();
            qDebug() << "Model: " << aCar->model();
            qDebug() << "year: " << aCar->year();
        }
        

        #3
        Send simpl types like string and int to C++ from Qml:

        Qml:

        function metPassObject()
        {
             objQtCPPSearchVOne.metPassObject("Ford", "Mustang", 1969);
        }
        

        And C++:

        Q_INVOKABLE void metPassObject (QString aMake, QString aModel, int aYear){
            Car* myCar = new Car(aMake, aModel, aYear);
            //...do smthg
        }
        
        M Offline
        M Offline
        Mathan M
        wrote on 30 Jul 2016, 08:42 last edited by
        #3

        Hi @medyakovvit ,

        Now I can pass the objects.

        Thanks a Lot and really appreciate your efforts.

        Mathan

        1 Reply Last reply
        0

        1/3

        29 Jul 2016, 15:34

        • Login

        • Login or register to search.
        1 out of 3
        • First post
          1/3
          Last post
        0
        • Categories
        • Recent
        • Tags
        • Popular
        • Users
        • Groups
        • Search
        • Get Qt Extensions
        • Unsolved