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. Simple Qt Quick program
Forum Updated to NodeBB v4.3 + New Features

Simple Qt Quick program

Scheduled Pinned Locked Moved Unsolved QML and Qt Quick
16 Posts 6 Posters 3.8k Views 3 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.
  • M mostefa

    @tomy said in Simple Qt Quick program:

    @mostefa
    Thanks for the reply.

    import QtQuick 2.6
    import QtQuick.Window 2.2
    
    import "Transformation.qml"
    
    Window {
        visible: true
        width: 640
        height: 480
        title: qsTr("Transformation")
    
        Transformation {
            id: transitions
        }
    
    }
    
    

    I get this error:
    qrc:/main.qml:4 "Transformation.qml": no such directory

    You have to change the name of your qml file from

    transformation.qml to Transformation.qml

    In qml custom components , the first letter must be in uppercase

    http://doc.qt.io/qt-5/qtqml-documents-definetypes.html#defining-an-object-type-with-a-qml-file

    tomyT Offline
    tomyT Offline
    tomy
    wrote on last edited by
    #5

    @mostefa
    I have done it.

    0_1505637566779_Capture.PNG

    1 Reply Last reply
    0
    • mrjjM Offline
      mrjjM Offline
      mrjj
      Lifetime Qt Champion
      wrote on last edited by
      #6

      so now it works?
      make sure u really rebuild all, include the resource file.

      tomyT 1 Reply Last reply
      1
      • mrjjM mrjj

        so now it works?
        make sure u really rebuild all, include the resource file.

        tomyT Offline
        tomyT Offline
        tomy
        wrote on last edited by tomy
        #7

        @mrjj

        make sure u really rebuild all, include the resource file.

        I did it. The same error.

        M 1 Reply Last reply
        0
        • tomyT tomy

          @mrjj

          make sure u really rebuild all, include the resource file.

          I did it. The same error.

          M Offline
          M Offline
          mostefa
          wrote on last edited by
          #8

          @tomy said in Simple Qt Quick program:

          @mrjj

          make sure u really rebuild all, include the resource file.

          I did it. The same error.

          What if you delete completely the build repository and then build again?

          1 Reply Last reply
          1
          • M mostefa

            Hi @tomy

            On the top of your Transformation.qml

            you have to add

            import "ClickableImage.qml"
            

            And on the top of your main.qml, you have to add

            import "Transformation.qml"

            and then add the Transform component, your code should look to something like this:

            main.qml:

            import QtQuick 2.6
            import QtQuick.Window 2.2
            
            import "Transformation.qml"
            
            Window {
                visible: true
                width: 640
                height: 480
                title: qsTr("Transformation")
            
               Transformation
            {
                   id: transformation
            .
            .
            .
            }
            }
            
            GrecKoG Offline
            GrecKoG Offline
            GrecKo
            Qt Champions 2018
            wrote on last edited by
            #9

            @mostefa said in Simple Qt Quick program:

            On the top of your Transformation.qml

            you have to add import "ClickableImage.qml"

            And on the top of your main.qml, you have to add import "Transformation.qml"

            No you don't.
            Just name them with an uppercase first letter and then you can just use them like so Transformation {} if they are in the same folder as the qml file you are trying to use them (in your case main.qml).

            1 Reply Last reply
            4
            • tomyT Offline
              tomyT Offline
              tomy
              wrote on last edited by
              #10

              Thank you, it shows the images on the window but no action is done by clicking them! How to fix it? It seems it's because I haven't used Transformation.qml well in main.qml.

              Here is main.qml:

              import QtQuick 2.6
              import QtQuick.Window 2.2
              
              Window {
                  visible: true
                  width: 800
                  height: 600
                  title: qsTr("Transformation")
              
                  Transformation {
                      id: transformation
                  }
              }
              
              

              How to do that and what are the raison d'ĂȘtre of those two functions and how to use them? Thanks

              1 Reply Last reply
              0
              • tomyT Offline
                tomyT Offline
                tomy
                wrote on last edited by
                #11

                Isn't there any way to make it work?

                E 1 Reply Last reply
                0
                • tomyT tomy

                  Isn't there any way to make it work?

                  E Offline
                  E Offline
                  Eeli K
                  wrote on last edited by
                  #12

                  @tomy I created a similar project and it works for me. Try copying the code once again into your files to make sure they are identical to the example code. You can also try adding some box_green.png file to assets, but other parts work without it for me.

                  The functions are apparently for testing purposes :) You can use them for example in this way:

                  import QtQuick 2.6
                  import QtQuick.Window 2.2
                  import QtQuick.Controls 2.0
                  Window {
                      visible: true
                      width: 640
                      height: 480
                      Column{
                          spacing: 10
                          Button {
                              onClicked: transformation._test_overlap()
                          }
                          Button {
                              onClicked: transformation._test_transformed()
                          }
                  
                          Transformation {
                              id: transformation
                          }
                      }
                  }
                  
                  1 Reply Last reply
                  1
                  • tomyT Offline
                    tomyT Offline
                    tomy
                    wrote on last edited by tomy
                    #13

                    Thank you for the answer.
                    I created another project that has this main.cpp:

                    #include <QGuiApplication>
                    #include <QQmlApplicationEngine>
                    
                    int main(int argc, char *argv[])
                    {
                        QGuiApplication app(argc, argv);
                    
                        QQmlApplicationEngine engine;
                        engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
                        if (engine.rootObjects().isEmpty())
                            return -1;
                    
                        return app.exec();
                    }
                    

                    By right clicking on the / folder below the qml.qrc in Projects view of Qt Creator and choosing Add New, I added a new C++ source file named ClickableImage.qml. It was added by its first letter in small so by renaming I capitalised it to big C and pasted this:

                    import QtQuick 2.8
                    Image {
                        id: root
                        signal clicked
                    
                        MouseArea
                        {
                            anchors.fill: parent
                            onClicked: root.clicked
                        }
                    }
                    

                    The same way for adding Transformation.qml with the code:

                    import QtQuick 2.8
                    Item {
                        width: bg.width
                        height: bg.height
                    
                        Image {
                            id: bg
                            source: "/background.png"
                        }
                    
                        MouseArea {
                            id: backgroundClicker
                            anchors.fill: parent
                            onClicked: {
                                circle.x = 84
                                box.rotation = 0
                                triangle.rotation = 0
                                triangle.scale = 1.0
                            }
                        }
                    
                        ClickableImage {
                            id: circle
                            x: 84; y: 68
                            source: "/circle_blue.png"
                            antialiasing: true
                            onClicked: x += 20
                        }
                    
                        ClickableImage {
                            id: box
                            x: 164; y: 68
                            source: "/box_green.png"
                            antialiasing: true
                            onClicked: rotation += 15
                        }
                    
                        ClickableImage {
                            id: triangle
                            x: 248; y: 68
                            source: "/triangle_red.png"
                            antialiasing: true
                            onClicked: {
                                rotation += 15
                                scale += 0.05
                            }
                        }
                    
                        function _test_transformed() {
                            circle.x += 20
                            box.rotation = 15
                            triangle.scale = 1.2
                            triangle.rotation = -15
                        }
                    
                        function _test_overlap() {
                            circle.x += 40
                            box.rotation = 15
                            triangle.scale = 2.0
                            triangle.rotation = 45
                        }
                    
                    }
                    

                    Finally added four images with the prefix / to the resource.

                    And since I'd capitalised the file names I did: clean all, run qmake, rebuild all. And ran the program.

                    The images are shown with no reaction on clicking them. I'm rather astonished what the problem is that it works for you but not me!

                    Please tell me what part do I have done wrong? And is this process exactly what you too have done?

                    E J.HilkJ 2 Replies Last reply
                    0
                    • tomyT tomy

                      Thank you for the answer.
                      I created another project that has this main.cpp:

                      #include <QGuiApplication>
                      #include <QQmlApplicationEngine>
                      
                      int main(int argc, char *argv[])
                      {
                          QGuiApplication app(argc, argv);
                      
                          QQmlApplicationEngine engine;
                          engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
                          if (engine.rootObjects().isEmpty())
                              return -1;
                      
                          return app.exec();
                      }
                      

                      By right clicking on the / folder below the qml.qrc in Projects view of Qt Creator and choosing Add New, I added a new C++ source file named ClickableImage.qml. It was added by its first letter in small so by renaming I capitalised it to big C and pasted this:

                      import QtQuick 2.8
                      Image {
                          id: root
                          signal clicked
                      
                          MouseArea
                          {
                              anchors.fill: parent
                              onClicked: root.clicked
                          }
                      }
                      

                      The same way for adding Transformation.qml with the code:

                      import QtQuick 2.8
                      Item {
                          width: bg.width
                          height: bg.height
                      
                          Image {
                              id: bg
                              source: "/background.png"
                          }
                      
                          MouseArea {
                              id: backgroundClicker
                              anchors.fill: parent
                              onClicked: {
                                  circle.x = 84
                                  box.rotation = 0
                                  triangle.rotation = 0
                                  triangle.scale = 1.0
                              }
                          }
                      
                          ClickableImage {
                              id: circle
                              x: 84; y: 68
                              source: "/circle_blue.png"
                              antialiasing: true
                              onClicked: x += 20
                          }
                      
                          ClickableImage {
                              id: box
                              x: 164; y: 68
                              source: "/box_green.png"
                              antialiasing: true
                              onClicked: rotation += 15
                          }
                      
                          ClickableImage {
                              id: triangle
                              x: 248; y: 68
                              source: "/triangle_red.png"
                              antialiasing: true
                              onClicked: {
                                  rotation += 15
                                  scale += 0.05
                              }
                          }
                      
                          function _test_transformed() {
                              circle.x += 20
                              box.rotation = 15
                              triangle.scale = 1.2
                              triangle.rotation = -15
                          }
                      
                          function _test_overlap() {
                              circle.x += 40
                              box.rotation = 15
                              triangle.scale = 2.0
                              triangle.rotation = 45
                          }
                      
                      }
                      

                      Finally added four images with the prefix / to the resource.

                      And since I'd capitalised the file names I did: clean all, run qmake, rebuild all. And ran the program.

                      The images are shown with no reaction on clicking them. I'm rather astonished what the problem is that it works for you but not me!

                      Please tell me what part do I have done wrong? And is this process exactly what you too have done?

                      E Offline
                      E Offline
                      Eeli K
                      wrote on last edited by
                      #14

                      @tomy You should add New File -> Qt -> QML file, not c++ file. But it shouldn't matter, I think, because the objects are visible when you run it. It sounds weird that graphics is well but not mouse clicks. But try again with QML file because it may mess up the project file. You can also show the contents of your .pro file.

                      1 Reply Last reply
                      1
                      • tomyT tomy

                        Thank you for the answer.
                        I created another project that has this main.cpp:

                        #include <QGuiApplication>
                        #include <QQmlApplicationEngine>
                        
                        int main(int argc, char *argv[])
                        {
                            QGuiApplication app(argc, argv);
                        
                            QQmlApplicationEngine engine;
                            engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
                            if (engine.rootObjects().isEmpty())
                                return -1;
                        
                            return app.exec();
                        }
                        

                        By right clicking on the / folder below the qml.qrc in Projects view of Qt Creator and choosing Add New, I added a new C++ source file named ClickableImage.qml. It was added by its first letter in small so by renaming I capitalised it to big C and pasted this:

                        import QtQuick 2.8
                        Image {
                            id: root
                            signal clicked
                        
                            MouseArea
                            {
                                anchors.fill: parent
                                onClicked: root.clicked
                            }
                        }
                        

                        The same way for adding Transformation.qml with the code:

                        import QtQuick 2.8
                        Item {
                            width: bg.width
                            height: bg.height
                        
                            Image {
                                id: bg
                                source: "/background.png"
                            }
                        
                            MouseArea {
                                id: backgroundClicker
                                anchors.fill: parent
                                onClicked: {
                                    circle.x = 84
                                    box.rotation = 0
                                    triangle.rotation = 0
                                    triangle.scale = 1.0
                                }
                            }
                        
                            ClickableImage {
                                id: circle
                                x: 84; y: 68
                                source: "/circle_blue.png"
                                antialiasing: true
                                onClicked: x += 20
                            }
                        
                            ClickableImage {
                                id: box
                                x: 164; y: 68
                                source: "/box_green.png"
                                antialiasing: true
                                onClicked: rotation += 15
                            }
                        
                            ClickableImage {
                                id: triangle
                                x: 248; y: 68
                                source: "/triangle_red.png"
                                antialiasing: true
                                onClicked: {
                                    rotation += 15
                                    scale += 0.05
                                }
                            }
                        
                            function _test_transformed() {
                                circle.x += 20
                                box.rotation = 15
                                triangle.scale = 1.2
                                triangle.rotation = -15
                            }
                        
                            function _test_overlap() {
                                circle.x += 40
                                box.rotation = 15
                                triangle.scale = 2.0
                                triangle.rotation = 45
                            }
                        
                        }
                        

                        Finally added four images with the prefix / to the resource.

                        And since I'd capitalised the file names I did: clean all, run qmake, rebuild all. And ran the program.

                        The images are shown with no reaction on clicking them. I'm rather astonished what the problem is that it works for you but not me!

                        Please tell me what part do I have done wrong? And is this process exactly what you too have done?

                        J.HilkJ Offline
                        J.HilkJ Offline
                        J.Hilk
                        Moderators
                        wrote on last edited by
                        #15

                        @tomy you need to add brackets to function calls:

                        //ClickableImage
                        Image {
                            id: root
                            signal clicked()//added brackets
                        
                            MouseArea
                            {
                                anchors.fill: parent
                                onClicked:{
                                    console.log("Clicked")//Added Console output
                                    root.clicked()//added brackets
                                }
                            }
                        }
                        

                        Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                        Q: What's that?
                        A: It's blue light.
                        Q: What does it do?
                        A: It turns blue.

                        tomyT 1 Reply Last reply
                        3
                        • J.HilkJ J.Hilk

                          @tomy you need to add brackets to function calls:

                          //ClickableImage
                          Image {
                              id: root
                              signal clicked()//added brackets
                          
                              MouseArea
                              {
                                  anchors.fill: parent
                                  onClicked:{
                                      console.log("Clicked")//Added Console output
                                      root.clicked()//added brackets
                                  }
                              }
                          }
                          
                          tomyT Offline
                          tomyT Offline
                          tomy
                          wrote on last edited by tomy
                          #16

                          @J.Hilk
                          Thank you. It solved the issue.

                          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