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. QQuickPaintedItem from .qml file
Forum Updated to NodeBB v4.3 + New Features

QQuickPaintedItem from .qml file

Scheduled Pinned Locked Moved Unsolved QML and Qt Quick
12 Posts 2 Posters 3.5k 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.
  • SGaistS Offline
    SGaistS Offline
    SGaist
    Lifetime Qt Champion
    wrote on last edited by
    #2

    Hi,

    Why not use a Loader ?

    Interested in AI ? www.idiap.ch
    Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

    ODБOïO 2 Replies Last reply
    1
    • SGaistS SGaist

      Hi,

      Why not use a Loader ?

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

      @SGaist hi,
      after your comment on my previous thread
      https://forum.qt.io/topic/87077/qt-application-with-public-qml-code-that-user-can-edit/2

      "One possible way is to copy the file you want to allow editing from the resource to a suitable writable location (see QStandardPaths).
      Then you have to tell your application to load that file if it exists otherwise the one from the resource.
      "

      I though the best solution was to do this by subclassing 'QQuickPaintedItem' ...

      I will try to do the same thing using Loader, it seems easier in fact.

      Thx!

      1 Reply Last reply
      0
      • ODБOïO Offline
        ODБOïO Offline
        ODБOï
        wrote on last edited by ODБOï
        #4

        Perfect, i dit it in 10 minutes with Loader !

        
            property Component qrcComponent
            property Component userComponent
        
        
            Component.onCompleted: {
        
                userComponent = Qt.createComponent("file:///C:/Users/userName/Documents/QML_CUSTOM_ITEM/Customizable.qml")
               //qrcComponent = Qt.createComponent("/Customizable.qml")
        
            }
        
            onUserComponentChanged: {
                if(userComponent.status==Component.Ready){
                    l.sourceComponent = userComponent
                }
                else{
                    qrcComponent = Qt.createComponent("/Customizable.qml")
                    if(qrcComponent.status==Component.Ready){
                        l.sourceComponent = qrcComponent
                    }
                }
            }
        
        
                Loader{
                    id:l
                    height: 150
                    width: 150
                    anchors.centerIn: parent
                   // source: "file:///C:/Users/userName/Documents/QML_CUSTOM_ITEM/Customizable.qml" ||  "/Customizable.qml"
                }
        

        Thx

        1 Reply Last reply
        0
        • SGaistS SGaist

          Hi,

          Why not use a Loader ?

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

          @SGaist said in QQuickPaintedItem from .qml file:

          Why not use a Loader ?

          FinalIy i did it with Loader , but is there a way to do the same thing with my QMProgressBar class ?

          1 Reply Last reply
          0
          • ODБOïO Offline
            ODБOïO Offline
            ODБOï
            wrote on last edited by
            #6

            On my Loader exemple, Is it possible to Reload component runtime ?

                Button{
                    text:"reload"
                    onClicked: { /* RELOADING ? */
                        userComponent = Qt.createComponent("file:///C:/Users/lagayev/Documents/QML_CUSTOM_ITEM/Customizable.qml");
                    }
                }
            

            If i edit 'Customizable.qml' while application is running, and click this 'reload' button 'Customizable.qml' is unchanged,
            i have to quit and restart my app to see changes. Could you tell me Why ?

            1 Reply Last reply
            0
            • ODБOïO Offline
              ODБOïO Offline
              ODБOï
              wrote on last edited by
              #7

              I tryed to clearComponentCache as it is described here :
              http://doc.qt.io/qt-5/qqmlengine.html#clearComponentCache

              class QmlEngineManager : public QQmlApplicationEngine
              {
                  Q_OBJECT
              public:
                  QmlEngineManager();
              
                  Q_INVOKABLE void clearCache() {
                      clearComponentCache();
                      qDebug()<<"engine cleared !";
                  }
              };
              

              Then in qml :

               Button{
                      text:"reload"
                      onClicked: { /* RELOADING ? */
                           engineManager.clearCache()
                          userComponent = Qt.createComponent("file:///C:/Users/lagayev/Documents/QML_CUSTOM_ITEM/Customizable.qml");
                      }
                  }
              

              witout success.

              1 Reply Last reply
              0
              • SGaistS Offline
                SGaistS Offline
                SGaist
                Lifetime Qt Champion
                wrote on last edited by
                #8

                What about destroying userComponent before you create the new one ?

                Interested in AI ? www.idiap.ch
                Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                ODБOïO 1 Reply Last reply
                0
                • SGaistS SGaist

                  What about destroying userComponent before you create the new one ?

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

                  @SGaist with this code, when i start my app, it will create a component from file:///C:/Users/usr/Documents/QML_CUSTOM_ITEM/Customizable.qml if that file exists, else it will create component from /Customizable.qml

                  But when app is running, if i DELETE 'Customizable.qml' file from that path (file:///C:/Users/usr/Documents/QML_CUSTOM_ITEM/Customizable.qml) , and press 'Reload' button, the same .qml file is displayed !

                  It looks like content of a given path is calculated only when the application starts..?

                  What is the probleme here ?

                     signal updateComponents()
                      Button{
                          text: "Reload"
                          onClicked: {
                              updateComponents()
                          }
                      }
                      Component.onCompleted:updateComponents()
                    
                    onUpdateComponents: {
                       var tmp =  Qt.createComponent("file:///C:/Users/usr/Documents/QML_CUSTOM_ITEM/Customizable.qml")
                       if(tmp.status===Component.Ready){
                                   l.sourceComponent = tmp
                       }
                       else{
                               tmp=Qt.createComponent("/Customizable.qml")
                               if(tmp.status===Component.Ready){
                                    l.sourceComponent=tmp
                                 }
                             }
                              delete(tmp)
                      }
                  
                      Loader{
                          id:l
                          height: 150
                          width: 150
                          anchors.centerIn: parent
                      }
                  
                  1 Reply Last reply
                  0
                  • SGaistS Offline
                    SGaistS Offline
                    SGaist
                    Lifetime Qt Champion
                    wrote on last edited by
                    #10

                    I was rather thinking about what is described here.

                    Interested in AI ? www.idiap.ch
                    Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                    ODБOïO 1 Reply Last reply
                    1
                    • SGaistS SGaist

                      I was rather thinking about what is described here.

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

                      @SGaist Hi,
                      I did that way too, but no success because

                      when my app calls :

                        var component = Qt.createComponent("file:///C:/Users/user/Documents/QML_CUSTOM_ITEM/Destructible.qml")
                      

                      inside that directory ("file:///C:/Users/user/Documents/QML_CUSTOM_ITEM") another file is created by qt, named

                      Destructible.qmlc ( 'c' like copy ? )

                      Next call 'Qt.createComponent()' loads that 'Destructible.qmlc'

                      1 Reply Last reply
                      0
                      • SGaistS Offline
                        SGaistS Offline
                        SGaist
                        Lifetime Qt Champion
                        wrote on last edited by
                        #12

                        This presentation might help.

                        Interested in AI ? www.idiap.ch
                        Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                        1 Reply Last reply
                        1

                        • Login

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