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?
QtWS25 Last Chance

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 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
    0
    • M Mathan M

      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 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
      0
      • M medyakovvit

        @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 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

        • Login

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