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.
  • 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