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. QML Loader Or createComponent/createObject memory management
Forum Updated to NodeBB v4.3 + New Features

QML Loader Or createComponent/createObject memory management

Scheduled Pinned Locked Moved Unsolved QML and Qt Quick
3 Posts 2 Posters 1.6k 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.
  • dchinna18D Offline
    dchinna18D Offline
    dchinna18
    wrote on last edited by
    #1

    I am developing application using Qt/QML in qnx and ubuntu desktop. I have used QML Loader to load the qml file.when i load the file using loader it occupies memory but thing is when i load and unload the file in loader, every time i load file it takes few memory and memory is continuous increasing. Actually in my application around 200 qml pages need to load, each page it increases memory and when i unload the page not decreasing memory, same behaviour for createComponent/createObject also. can any one provide the solution?

    1 Reply Last reply
    0
    • V Offline
      V Offline
      vladstelmahovsky
      wrote on last edited by
      #2

      its hard to say anything w/o qt version and code samples

      1 Reply Last reply
      0
      • dchinna18D Offline
        dchinna18D Offline
        dchinna18
        wrote on last edited by dchinna18
        #3

        QT 5.3.2
        Following is sample code, in main qml i am loading Samplerect1.qml and Samplerect2.qml
        main.qml

        import QtQuick 2.3
        import QtQuick.Controls 1.2

        Rectangle {
        id: mainAppWind
        visible: true
        width: 640
        height: 480
        // title: qsTr("Hello World")

        signal closedSgnl
        
        property QtObject obj1;
        property QtObject obj2;
        property var component1
        property var component2
        Loader{
            id: loderId1
        

        // active: true
        // asynchronous: true
        }

        Loader{
            id: loderId2
        

        // active: true
        // asynchronous: true
        }

        Rectangle{
            id: mainrect1
            height: 100
            width: 100
            anchors.centerIn: parent
            color: "green"
            MouseArea{
                anchors.fill: parent
                onClicked: {
        

        // loderId1.setSource("Samplerect1.qml")
        component1 = Qt.createComponent("Samplerect1.qml")
        obj1 = component1.createObject(mainAppWind);
        }
        }
        }
        Rectangle{
        id: mainrect12
        height: 100
        width: 100
        anchors.top: mainrect1.top
        anchors.left: mainrect1.right
        // anchors.leftMargin: 50
        color: "yellow"
        MouseArea{
        anchors.fill: parent
        onClicked: {
        // loderId2.setSource("Samplerect2.qml")
        component2 = Qt.createComponent("Samplerect2.qml")
        obj2 = component2.createObject(mainAppWind);
        }
        }
        }

        Text {
            text: qsTr("Hello World")
            anchors.centerIn: parent
        }
        Component.onCompleted: {
        
        }
        
        onClosedSgnl: {
            console.log("destroying objecta")
        
            if(obj1)
            {
                obj1.destroy()
            }
            if(obj2)
            {
                obj2.destroy()
            }
        
        
        }
        

        }

        Samplerect1:

        import QtQuick 2.3

        Rectangle {
        id: rectIdSamp
        width: 300
        height: 50
        objectName: "Samplerect1"
        Image {
        id: idImage1
        width: 50
        height: 50
        source: "images.jpeg"
        }
        Image {
        id: idImage2
        anchors.left: idImage1.right
        width: 50
        height: 50
        source: "index.jpeg"
        }
        Image {
        id: idImage3
        anchors.left: idImage2.right
        width: 50
        height: 50
        source: "index2.jpeg"
        }
        Image {
        id: idImage4
        anchors.left: idImage3.right
        width: 50
        height: 50
        source: "images1.jpeg"
        }
        MouseArea{
        id: mAId1
        anchors.fill: parent
        onClicked: {
        // loderId1.setSource("")
        clearData()
        }
        }
        Text {
        id: text1
        anchors.left: idImage4.right
        text: qsTr("text1 data")
        height: 20
        width: 30
        font.pixelSize: 12
        }
        Text {
        id: text2
        anchors.left: idImage4.right
        anchors.top: text1.bottom
        text: qsTr("text2 data")
        height: 20
        width: 30
        font.pixelSize: 12
        }
        Text {
        id: text3
        anchors.left: idImage4.right
        anchors.top: text2.bottom
        text: qsTr("text3 data")
        height: 20
        width: 30
        font.pixelSize: 12
        }
        Text {
        id: text4
        anchors.left: idImage4.right
        anchors.top: text3.bottom
        text: qsTr("text4 data")
        height: 20
        width: 30
        font.pixelSize: 12
        }
        Text {
        id: text5
        anchors.left: idImage4.right
        anchors.top: text4.bottom
        text: qsTr("text5 data")
        height: 20
        width: 30
        font.pixelSize: 12
        }
        Component.onDestruction: {

        }
        function clearData()
        {
            closedSgnl()
        }
        

        }

        Samplerect2:

        import QtQuick 2.3

        Item{
        id: itemId
        anchors.fill: parent
        Rectangle {
        id: rectIdSamp
        width: 300
        height: 50
        objectName: "Samplerect1"
        anchors.left: parent.left
        anchors.leftMargin: 300
        Image {
        id: idImage1
        // anchors.left: parent.right
        width: 50
        height: 50
        source: "images11.jpeg"
        }
        Image {
        id: idImage2
        anchors.left: idImage1.right
        width: 50
        height: 50
        source: "index22.jpeg"
        }
        Image {
        id: idImage3
        anchors.left: idImage2.right
        width: 50
        height: 50
        source: "index21.jpeg"
        }
        Image {
        id: idImage4
        anchors.left: idImage3.right
        width: 50
        height: 50
        source: "images12.jpeg"
        }
        MouseArea{
        anchors.fill: parent
        onClicked: {
        // loderId2.setSource("")
        rectIdSamp.clearData()
        }
        }

            function clearData()
            {
                closedSgnl()
            }
        
        }
        

        }

        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