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 for variables ??
Forum Update on Monday, May 27th 2025

QML Loader for variables ??

Scheduled Pinned Locked Moved Solved QML and Qt Quick
14 Posts 5 Posters 1.7k 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.
  • mtaylorM mtaylor

    Trying to use a Loader to reload a variable every hour...
    Below is code used, getting error on property alias temp: myvar.temp
    ERROR ->Invalid alias reference. Unable to find id "myvar"

    why is the Loader variable not seen?
    any advice appreciated.

    QML CODE used:

    temp.qml - loader file // this file is updated every hour with latest weather temp

    code_text
    
    Item {
    id:myvar
    property string temp : " Clear - 85°"
    

    }

    main qml file
    ...

    code_text
    ```Item {
        Loader { 
            id: pageLoader 
            asynchronous: true
            source: "/run/media/hammer/Data/projects/temp.qml"
        }
        
              }
              
              Text {
                // property string temp : " Clear - 85°"
               property alias temp: myvar.temp // does not work
               property alias temp: pageLoader.temp  //also tried this same error??
               text: temp
               font.family: "Roboto"
               font.pointSize: 22
               color: "black"
           }
          }
    

    code_text

    ODБOïO Offline
    ODБOïO Offline
    ODБOï
    wrote on last edited by
    #2

    hi
    @mtaylor said in QML Loader for variables ??:

    use a Loader to reload a variable every hour...

    Loader is not used for that please see the description https://doc.qt.io/qt-5/qml-qtquick-loader.html#details

    You can use QML Timer

    1 Reply Last reply
    1
    • M Offline
      M Offline
      Moisi
      wrote on last edited by
      #3

      Any id is file scoped.

      So main.qml have no idea what is myvar.

      You can access to your variable via the loader item property (pageLoader.item.temp).

      1 Reply Last reply
      1
      • mtaylorM Offline
        mtaylorM Offline
        mtaylor
        wrote on last edited by
        #4

        ok so that gets rid of the error using text: pageLoader.myvar.temp
        but nothing shows up on screen output??

        i am using qmlscene for testing is there another way to show the value of that variable?

        thanks

        1 Reply Last reply
        0
        • mtaylorM Offline
          mtaylorM Offline
          mtaylor
          wrote on last edited by
          #5

          @LeLev
          i am working on one part at a time, trying to get loader working, then implement a timer to reload every hour, thanks i looked at docs already, but cant find an example of loading a property / variable,
          seems it should be easy, but not having any luck...

          1 Reply Last reply
          0
          • Y Offline
            Y Offline
            Yaswanth
            wrote on last edited by
            #6

            main.qml

            
            Window {
                visible: true
                width: 640
                height: 480
                title: qsTr("Hello World")
                Item {
                    id: item
                    property alias loaderEle: pageLoader
                    Loader {
                        id: pageLoader
                        asynchronous: true
                        source: "qrc:/temp.qml"
                    }
                }
            
                Text {
                    property alias temp2: item.loaderEle 
                    text: temp2.item == null ? "" : temp2.item.temp
                    font.family: "Roboto"
                    font.pointSize: 22
                    color: "black"
                }
            }
            

            temp.qml

            import QtQuick 2.0
            
            Item {
                id:myvar
                property string temp : " Clear - 85°"
            }
            
            

            Please make sure you have access to loader element. After that to access the properties from the loaded source in loader, use ".item"

            mtaylorM 1 Reply Last reply
            0
            • Y Yaswanth

              main.qml

              
              Window {
                  visible: true
                  width: 640
                  height: 480
                  title: qsTr("Hello World")
                  Item {
                      id: item
                      property alias loaderEle: pageLoader
                      Loader {
                          id: pageLoader
                          asynchronous: true
                          source: "qrc:/temp.qml"
                      }
                  }
              
                  Text {
                      property alias temp2: item.loaderEle 
                      text: temp2.item == null ? "" : temp2.item.temp
                      font.family: "Roboto"
                      font.pointSize: 22
                      color: "black"
                  }
              }
              

              temp.qml

              import QtQuick 2.0
              
              Item {
                  id:myvar
                  property string temp : " Clear - 85°"
              }
              
              

              Please make sure you have access to loader element. After that to access the properties from the loaded source in loader, use ".item"

              mtaylorM Offline
              mtaylorM Offline
              mtaylor
              wrote on last edited by
              #7

              @Yaswanth
              still get no output..

              what i did get working is this ...
              some how u can call files in the same directory so i tried this
              created a file called Temp.qml

              import QtQuick 2.0
              Item {
                  id:myvar
              property string temp : " Clear - 85°"
              Text {
                     text: temp
                     font.family: "Roboto"
                      font.pointSize: 22
                      color: "black"
                      antialiasing : true
                    }
              }
              
              in main.qml
              ```...
              Temp {width:140;height:16;anchors.right: parent} // function call to Temp.qml
              

              works, but when i add a timer

              code_text
              ```
              Timer {
                      interval: 5000 //5 sec //testing
                      repeat: true
                     running: true
                     triggeredOnStart: true
                     onTriggered: Temp {width:140;height:16;anchors.right: parent} // function call to Temp.qml
                 }
              

              get this error -
              Cannot assign object type Temp_QMLTYPE_7 with no default method

              how can i call this Temp.qml function with a timer?

              thanks

              Y 1 Reply Last reply
              0
              • mtaylorM mtaylor

                @Yaswanth
                still get no output..

                what i did get working is this ...
                some how u can call files in the same directory so i tried this
                created a file called Temp.qml

                import QtQuick 2.0
                Item {
                    id:myvar
                property string temp : " Clear - 85°"
                Text {
                       text: temp
                       font.family: "Roboto"
                        font.pointSize: 22
                        color: "black"
                        antialiasing : true
                      }
                }
                
                in main.qml
                ```...
                Temp {width:140;height:16;anchors.right: parent} // function call to Temp.qml
                

                works, but when i add a timer

                code_text
                ```
                Timer {
                        interval: 5000 //5 sec //testing
                        repeat: true
                       running: true
                       triggeredOnStart: true
                       onTriggered: Temp {width:140;height:16;anchors.right: parent} // function call to Temp.qml
                   }
                

                get this error -
                Cannot assign object type Temp_QMLTYPE_7 with no default method

                how can i call this Temp.qml function with a timer?

                thanks

                Y Offline
                Y Offline
                Yaswanth
                wrote on last edited by
                #8

                @mtaylor said in QML Loader for variables ??:

                how can i call this Temp.qml function with a timer?

                What do you mean by calling Temp.qml?

                mtaylorM 1 Reply Last reply
                0
                • Y Yaswanth

                  @mtaylor said in QML Loader for variables ??:

                  how can i call this Temp.qml function with a timer?

                  What do you mean by calling Temp.qml?

                  mtaylorM Offline
                  mtaylorM Offline
                  mtaylor
                  wrote on last edited by
                  #9

                  @Yaswanth
                  for the timer trigger -
                  onTriggered: Temp {width:140;height:16;anchors.right: parent} // function call to Temp.qml

                  am i right with the timer, that it executes that trigger line every 5 secs?

                  without the timer the Temp {} function works fine...

                  Y 1 Reply Last reply
                  0
                  • mtaylorM mtaylor

                    @Yaswanth
                    for the timer trigger -
                    onTriggered: Temp {width:140;height:16;anchors.right: parent} // function call to Temp.qml

                    am i right with the timer, that it executes that trigger line every 5 secs?

                    without the timer the Temp {} function works fine...

                    Y Offline
                    Y Offline
                    Yaswanth
                    wrote on last edited by
                    #10

                    @mtaylor
                    The way which you have used onTriggered is incorrect.
                    If you want to display or update Temp.qml properties, using id of the Temp.qml component, you can access.
                    If you want to create Temp.qml,
                    https://doc.qt.io/qt-5/qtqml-javascript-dynamicobjectcreation.html.
                    To understand Timer usage, please check https://doc.qt.io/archives/qt-4.8/qml-timer.html#onTriggered-signal

                    mtaylorM 1 Reply Last reply
                    0
                    • Y Yaswanth

                      @mtaylor
                      The way which you have used onTriggered is incorrect.
                      If you want to display or update Temp.qml properties, using id of the Temp.qml component, you can access.
                      If you want to create Temp.qml,
                      https://doc.qt.io/qt-5/qtqml-javascript-dynamicobjectcreation.html.
                      To understand Timer usage, please check https://doc.qt.io/archives/qt-4.8/qml-timer.html#onTriggered-signal

                      mtaylorM Offline
                      mtaylorM Offline
                      mtaylor
                      wrote on last edited by
                      #11

                      @Yaswanth
                      thanks i have read the docs,
                      still not clear on what can executed with the timer trigger is reached??
                      i am not updating Temp.qml, with qml code
                      it is written by a separate JS script every hour...i want my main qml file to reload that file every hour to reflect the updated variable contents

                      here is what i am trying to create - https://imgur.com/sAW05ez
                      custom kscreenlocker app to show temperature and other items

                      i can load the Temp.qml file by this Temp {} works fine in my test case

                      but when i add the timer part with Temp {}

                      onTriggered: Temp {width:140;height:16;anchors.right: parent} // function call to Temp.qml
                      

                      get this error -
                      Cannot assign object type Temp_QMLTYPE_7 with no default method

                      i guess the question is how do make this call with a timer?

                      jsulmJ 1 Reply Last reply
                      0
                      • mtaylorM mtaylor

                        @Yaswanth
                        thanks i have read the docs,
                        still not clear on what can executed with the timer trigger is reached??
                        i am not updating Temp.qml, with qml code
                        it is written by a separate JS script every hour...i want my main qml file to reload that file every hour to reflect the updated variable contents

                        here is what i am trying to create - https://imgur.com/sAW05ez
                        custom kscreenlocker app to show temperature and other items

                        i can load the Temp.qml file by this Temp {} works fine in my test case

                        but when i add the timer part with Temp {}

                        onTriggered: Temp {width:140;height:16;anchors.right: parent} // function call to Temp.qml
                        

                        get this error -
                        Cannot assign object type Temp_QMLTYPE_7 with no default method

                        i guess the question is how do make this call with a timer?

                        jsulmJ Offline
                        jsulmJ Offline
                        jsulm
                        Lifetime Qt Champion
                        wrote on last edited by jsulm
                        #12

                        @mtaylor said in QML Loader for variables ??:

                        onTriggered: Temp {width:140;height:16;anchors.right: parent}

                        I'm not a QML expert, but don't you create an instance of Temp here instead of calling a method on existing instance?
                        onTriggered expects something executable, not just an instance (without default method, so it can't be called).

                        Don't you actually want to update an existing Temp instance? You should have one in the same QML file where onTrigger is.

                        https://forum.qt.io/topic/113070/qt-code-of-conduct

                        mtaylorM 1 Reply Last reply
                        0
                        • jsulmJ jsulm

                          @mtaylor said in QML Loader for variables ??:

                          onTriggered: Temp {width:140;height:16;anchors.right: parent}

                          I'm not a QML expert, but don't you create an instance of Temp here instead of calling a method on existing instance?
                          onTriggered expects something executable, not just an instance (without default method, so it can't be called).

                          Don't you actually want to update an existing Temp instance? You should have one in the same QML file where onTrigger is.

                          mtaylorM Offline
                          mtaylorM Offline
                          mtaylor
                          wrote on last edited by mtaylor
                          #13

                          @jsulm
                          i believe i am in over my head here...i think what i am trying to do is not even possible...
                          kscreenlocker does not allow internet access, and i think my idea of reloading a qml page every hour will not work due to the way kscreenlocker works.

                          thanks for the help

                          ODБOïO 1 Reply Last reply
                          0
                          • mtaylorM mtaylor

                            @jsulm
                            i believe i am in over my head here...i think what i am trying to do is not even possible...
                            kscreenlocker does not allow internet access, and i think my idea of reloading a qml page every hour will not work due to the way kscreenlocker works.

                            thanks for the help

                            ODБOïO Offline
                            ODБOïO Offline
                            ODБOï
                            wrote on last edited by
                            #14
                            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