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. emitting multiple signals at once from c++ to qml

emitting multiple signals at once from c++ to qml

Scheduled Pinned Locked Moved Unsolved QML and Qt Quick
2 Posts 2 Posters 538 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.
  • E Offline
    E Offline
    erikm
    wrote on last edited by
    #1

    Hello,
    I have a list of my onw QObjects in C++

    QList<QObject *>
    

    This list is exposed to QML by a wrapper class

     qmlRegisterSingletonType<ListManager> ("foo", 1, 0, "Lists",
                [](QQmlEngine *engine, QJSEngine *scriptEngine) -> QObject * {
            Q_UNUSED(engine)
            Q_UNUSED(scriptEngine)
    
            return new ListManager;
        });
    

    In QML I iterate over that list to dynamically create a bunch of objects

    ...
    for(var i=0; i < objects.length; i++) {
       var myCppObject = objects[i];
       var object = Qt.createQmlObject('MyQMLObject {}', parent);
       object.property = Qt.binding(function() {return myCppObject.property; });
    ...
    

    As you can see I am using Qt.binding() to bind a property from the Cpp Object to the QML Object. This property is defined like this:

    // myobject.cpp
        Q_PROPERTY(int property READ property NOTIFY propertyChanged)
    signals:
        void propertyChanged(int newProperty);
    

    Now when I change a bunch of objects in a loop in C++ I get the following behavior (in pseudo code):

    //in cpp
    emit propertyChanged(1); //for object 1
    emit propertyChanged(2); //for object 2
    emit propertyChanged(3); //for object 3
    // in qml
    onPropertyChanged 3 // for object 3
    onPropertyChanged 3 // for object 1
    onPropertyChanged 3 // for object 2
    

    What am I missing?
    Thank you,
    erikm

    T 1 Reply Last reply
    0
    • E erikm

      Hello,
      I have a list of my onw QObjects in C++

      QList<QObject *>
      

      This list is exposed to QML by a wrapper class

       qmlRegisterSingletonType<ListManager> ("foo", 1, 0, "Lists",
                  [](QQmlEngine *engine, QJSEngine *scriptEngine) -> QObject * {
              Q_UNUSED(engine)
              Q_UNUSED(scriptEngine)
      
              return new ListManager;
          });
      

      In QML I iterate over that list to dynamically create a bunch of objects

      ...
      for(var i=0; i < objects.length; i++) {
         var myCppObject = objects[i];
         var object = Qt.createQmlObject('MyQMLObject {}', parent);
         object.property = Qt.binding(function() {return myCppObject.property; });
      ...
      

      As you can see I am using Qt.binding() to bind a property from the Cpp Object to the QML Object. This property is defined like this:

      // myobject.cpp
          Q_PROPERTY(int property READ property NOTIFY propertyChanged)
      signals:
          void propertyChanged(int newProperty);
      

      Now when I change a bunch of objects in a loop in C++ I get the following behavior (in pseudo code):

      //in cpp
      emit propertyChanged(1); //for object 1
      emit propertyChanged(2); //for object 2
      emit propertyChanged(3); //for object 3
      // in qml
      onPropertyChanged 3 // for object 3
      onPropertyChanged 3 // for object 1
      onPropertyChanged 3 // for object 2
      

      What am I missing?
      Thank you,
      erikm

      T Offline
      T Offline
      Tirupathi Korla
      wrote on last edited by
      #2
      This post is deleted!
      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