Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. [SOLVED]Dynamically Created Custom QML Type has no Children
Forum Updated to NodeBB v4.3 + New Features

[SOLVED]Dynamically Created Custom QML Type has no Children

Scheduled Pinned Locked Moved General and Desktop
2 Posts 1 Posters 1.4k Views 1 Watching
  • 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.
  • F Offline
    F Offline
    fatdollar
    wrote on last edited by
    #1

    I've written a custom QML Type in c++ which is a Vehicle Gauge. The class works wonderfully and I can export it to QML and use it just fine. I then created a QML file with this custom type as the Parent/Root item in the file. If I load this QML file in start up everything works as desired. My custom signals work as I expect them to. The other objects (ie MouseArea, Rectangle) behave just fine.

    The problem comes when I try to dynamically create this QML file. None of the objects know anything about the other ones in the file and my signals form the custom QML type don't fire. I know they are getting sent but the QML doesn't do anything. The object loads and shows up in the view but dosn't do anything.

    Here is some Code to demonstrate a little bit:

    C++:
    @class MyGauge: public QQuickPaintedItem
    {
    Q_OBJECT

    //QML properties
    //various properties
    

    ......

    signals:
    void mySignal();
    ......
    // functions and such
    }
    @

    QML file using MyGauge:
    @MyGauge{
    id: gauge
    onMySignal: {
    console.log("on move gauge")
    mouse.function()
    }

    Rectangle {
        id: highlight
        anchors.fill: parent
        color: "transparent"
        border.color: "black"
        border.width: 3
        visible: mouse.visible
    }
    
    MouseArea {
        id: mouse
        anchors.fill: parent
        visible: false
        onReleased: {
            console.log("release")
            gauge.z = 0//bottom level
            drag.target = null
            visible = false
            exitMenu()
        }
    
        function function() {
            visible = true
            drag.target = gauge
            drag.axis = Drag.XandYAxis
            drag.maximumX = gauge.parent.width - gauge.width
            drag.minimumX = 0
            drag.maximumY = gauge.parent.height - gauge.height
            drag.minimumY = 0
            gauge.z = 31//on top of all gauges
        }
    }
    
    function function1(col,row) {
       //calculatoins
    }
    
    function function2(x,y,mX,mY) {
       //calculations
    }
    

    }
    @

    javascript for creating MyGauge:
    @

    function createGauge(string, row, col, parent, color, redline, needle, pid) {
    console.log(string, parent)
    component = Qt.createComponent(string);
    if (component.status === Component.Ready) {
    gauge = component.createObject(parent, {"y": col160, "x": row80, "color": color, "needle": needle, "redline": redline, "parameter": pid});
    if (gauge === null) {
    console.log("Error creating object");
    }
    } else if (component.status === Component.Error) {
    console.log("Error loading component:", component.errorString());
    }
    }@

    As I said before the QML file works perfectly when it is not used with the javascript to dynamically create the object. But when I use the javascript to create the object onMySignal doesn't even process. I can manually connect the signal to a function using :
    @gauge.onMoveGauge.connect(foo)@

    However then I can't call function1 or function2 anywhere in the file because I get then error that they are undefined. The highlight.visible also does not update with the mouse.visible even if I use a Binding element. Also when i try to look at the children of gauge i get null...as if the MouseArea and Rectangle aren't event there.

    I'm completely at a loss as to what is happening...at this point any advice would be better than my frustrated attempts to hack this apart.

    1 Reply Last reply
    0
    • F Offline
      F Offline
      fatdollar
      wrote on last edited by
      #2

      OK I ended up solving this one on my own...

      The problem was where is was calling the javascript function createGauge.

      Basically I had a Parent object that dynamically created a menu for the gauge selection...I called my create function within the menu and it did not work.

      When I create MyGauge from within the parent object it worked just fine.

      Thanks. I hope that made sense...if you have any questions of that didn't make any sense I'd be happy to clarify.

      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