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. Independence MouseArea.

Independence MouseArea.

Scheduled Pinned Locked Moved Solved QML and Qt Quick
qmlc++
12 Posts 3 Posters 3.1k 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.
  • T Offline
    T Offline
    TheGringerEye
    wrote on last edited by
    #1

    Hello!
    How to make one MouseArea (code is here - https://pastebin.com/qtdwwHTn) independent of the other MouseAreas ? I dont keep in focus at the same time two my MouseArea now, i want fix this.
    I need for you help!
    Thanks!

    1 Reply Last reply
    0
    • dheerendraD Offline
      dheerendraD Offline
      dheerendra
      Qt Champions 2022
      wrote on last edited by
      #2

      Question is confusing. What is the behaviour you are looking for ? Can you add more details ? What you want to fix ? I ran your program. It shows the two rounded rectangle & there is one round button inside the rounded rectangle. Beyond this what that you are expecting ? Please add more details.

      Dheerendra
      @Community Service
      Certified Qt Specialist
      http://www.pthinks.com

      T 1 Reply Last reply
      3
      • dheerendraD dheerendra

        Question is confusing. What is the behaviour you are looking for ? Can you add more details ? What you want to fix ? I ran your program. It shows the two rounded rectangle & there is one round button inside the rounded rectangle. Beyond this what that you are expecting ? Please add more details.

        T Offline
        T Offline
        TheGringerEye
        wrote on last edited by
        #3

        @dheerendra is custom joysticks. I want to control joysticks with two fingers at the same time.

        1 Reply Last reply
        0
        • dheerendraD Offline
          dheerendraD Offline
          dheerendra
          Qt Champions 2022
          wrote on last edited by
          #4

          With mouseArea it is not possible. Mouse is singleTouch device. You need to use the MultiTouchArea for this to work.

          Dheerendra
          @Community Service
          Certified Qt Specialist
          http://www.pthinks.com

          T 2 Replies Last reply
          2
          • dheerendraD dheerendra

            With mouseArea it is not possible. Mouse is singleTouch device. You need to use the MultiTouchArea for this to work.

            T Offline
            T Offline
            TheGringerEye
            wrote on last edited by
            #5

            @dheerendra said in Independence MouseArea.:

            MultiTouchArea

            I know, i deploy my application on android device.

            1 Reply Last reply
            0
            • dheerendraD dheerendra

              With mouseArea it is not possible. Mouse is singleTouch device. You need to use the MultiTouchArea for this to work.

              T Offline
              T Offline
              TheGringerEye
              wrote on last edited by
              #6

              @dheerendra MultiPointTouchArea don't have drag&drop.

              1 Reply Last reply
              0
              • dheerendraD Offline
                dheerendraD Offline
                dheerendra
                Qt Champions 2022
                wrote on last edited by
                #7

                do u want to do drag & drop one area to another at some time using two fingers ? Not clear about the drag-drop with multi touch request.

                Dheerendra
                @Community Service
                Certified Qt Specialist
                http://www.pthinks.com

                T 2 Replies Last reply
                0
                • dheerendraD dheerendra

                  do u want to do drag & drop one area to another at some time using two fingers ? Not clear about the drag-drop with multi touch request.

                  T Offline
                  T Offline
                  TheGringerEye
                  wrote on last edited by
                  #8

                  @dheerendra I try to show - https://www.youtube.com/watch?v=5uaJbqMCaf8&feature=youtu.be

                  1 Reply Last reply
                  0
                  • dheerendraD dheerendra

                    do u want to do drag & drop one area to another at some time using two fingers ? Not clear about the drag-drop with multi touch request.

                    T Offline
                    T Offline
                    TheGringerEye
                    wrote on last edited by
                    #9

                    @dheerendra I can not synchronously control two joysticks. Do you understand me?

                    johngodJ 1 Reply Last reply
                    0
                    • T TheGringerEye

                      @dheerendra I can not synchronously control two joysticks. Do you understand me?

                      johngodJ Offline
                      johngodJ Offline
                      johngod
                      wrote on last edited by
                      #10

                      @TheGringerEye You cannot use 2 mouse areas it wont work. The way to got is to use MultiPointTouchArea and TouchPoint. MultiPointTouchArea doesnt have the drag option so you will have to mimic yourself. Here's a hacky implementation that you can adapt to your use case:

                      property bool point1IsJoystick1: false
                          property bool point1IsJoystick2: false
                      
                          property bool point2IsJoystick1: false
                          property bool point2IsJoystick2: false
                      
                      
                          MultiPointTouchArea {
                            anchors.fill: parent
                            touchPoints: [
                                TouchPoint {
                                    id: point1
                      
                                    onPressedChanged: {
                                        if (pressed) {
                                            //console.log("startX: "+startX)
                                            if (joyStick1Pressed(startX, startY)) {
                                                point1IsJoystick1 = true
                                            }
                      
                                            if (joyStick2Pressed(startX, startY)) {
                                                point1IsJoystick2 = true
                                            }
                                        }
                                        else {
                                            point1IsJoystick2 = false
                                            point1IsJoystick1 = false
                                        }
                      
                                    }
                      
                                    onXChanged: {
                                        console.log("startX: "+startX)
                                        if (point1IsJoystick1) {
                                            joyStick1BtnMove(x, y)
                                        }
                      
                                        if (point1IsJoystick2) {
                                            joyStick2BtnMove(x, y)
                                        }
                                    }
                      
                                    onYChanged: {
                                        console.log("startX: "+startX)
                                        if (point1IsJoystick1) {
                                            joyStick1BtnMove(x, y)
                                        }
                      
                                        if (point1IsJoystick2) {
                                            joyStick2BtnMove(x, y)
                                        }
                                    }
                      
                      
                      
                                },
                                TouchPoint {
                                    id: point2
                      
                                    onPressedChanged: {
                                        if (pressed) {
                                            //console.log("startX: "+startX)
                                            if (joyStick1Pressed(startX, startY)) {
                                                point2IsJoystick1 = true
                                            }
                      
                                            if (joyStick2Pressed(startX, startY)) {
                                                point2IsJoystick2 = true
                                            }
                                        }
                                        else {
                                            point2IsJoystick2 = false
                                            point2IsJoystick1 = false
                                        }
                      
                                    }
                      
                                    onXChanged: {
                                        console.log("startX: "+startX)
                                        if (point2IsJoystick1) {
                                            joyStick1BtnMove(x, y)
                                        }
                      
                                        if (point2IsJoystick2) {
                                            joyStick2BtnMove(x, y)
                                        }
                                    }
                      
                                    onYChanged: {
                                        console.log("startX: "+startX)
                                        if (point2IsJoystick1) {
                                            joyStick1BtnMove(x, y)
                                        }
                      
                                        if (point2IsJoystick2) {
                                            joyStick2BtnMove(x, y)
                                        }
                                    }
                      
                                }
                      
                            ]
                      
                      
                            Rectangle {
                              id: joystick1
                              width: 50
                              height: 150
                              color: "gray"
                              radius: 25
                              x: 150
                              y: 20
                            }
                      
                            Rectangle {
                              id: joystick1Btn
                              width: 50
                              height: 50
                              radius: 25
                              color: "blue"
                              x: joystick1.x
                              y: joystick1.y
                            }
                      
                      
                            Rectangle {
                              id: joystick2
                              width: 150
                              height: 50
                              x: 300
                              y: 200
                              color: "gray"
                              radius: 25
                            }
                      
                            Rectangle {
                              id: joystick2Btn
                              width: 50
                              height: 50
                              radius: 25
                              color: "blue"
                              x: joystick2.x
                              y: joystick2.y
                            }
                      
                          }//MultiPointTouchArea
                      
                      
                      
                          function joyStick1Pressed(xx, yy) {
                              if (    xx >= joystick1Btn.x && xx <= joystick1Btn.x+joystick1Btn.width
                                      && yy >= joystick1Btn.y && yy <= joystick1Btn.y+joystick1Btn.height) {
                                  console.log("click inside joystick1")
                                  return true;
                              }
                              else {
                                  console.log("click outside joystick1")
                                  return false;
                              }
                          }
                      
                          function joyStick1BtnMove(xx, yy) {
                              if (yy > joystick1.y+joystick1.height-joystick1Btn.height)
                                  joystick1Btn.y = joystick1.y+joystick1.height-joystick1Btn.height
                               else if(yy < joystick1.y)
                                  joystick1Btn.y = joystick1.y
                              else
                                  joystick1Btn.y = yy
                          }
                      
                      
                      
                          function joyStick2Pressed(xx, yy) {
                                if (    xx >= joystick2Btn.x && xx <= joystick2Btn.x+joystick2Btn.width
                                      && yy >= joystick2Btn.y && yy <= joystick2Btn.y+joystick2Btn.height) {
                                  //console.log("click inside joystick2")
                                  return true;
                              }
                              else {
                                  //console.log("click outside joystick2")
                                  return false;
                              }
                          }
                      
                          function joyStick2BtnMove(xx, yy) {
                              if (xx < joystick2.x)
                                  joystick2Btn.x = joystick2.x
                               else if(xx > joystick2.x+joystick2.width-joystick2Btn.width)
                                  joystick2Btn.x = joystick2.x+joystick2.width-joystick2Btn.width
                              else
                                  joystick2Btn.x = xx
                          }
                      
                      
                      
                      
                      T 1 Reply Last reply
                      0
                      • T Offline
                        T Offline
                        TheGringerEye
                        wrote on last edited by
                        #11
                        This post is deleted!
                        1 Reply Last reply
                        0
                        • johngodJ johngod

                          @TheGringerEye You cannot use 2 mouse areas it wont work. The way to got is to use MultiPointTouchArea and TouchPoint. MultiPointTouchArea doesnt have the drag option so you will have to mimic yourself. Here's a hacky implementation that you can adapt to your use case:

                          property bool point1IsJoystick1: false
                              property bool point1IsJoystick2: false
                          
                              property bool point2IsJoystick1: false
                              property bool point2IsJoystick2: false
                          
                          
                              MultiPointTouchArea {
                                anchors.fill: parent
                                touchPoints: [
                                    TouchPoint {
                                        id: point1
                          
                                        onPressedChanged: {
                                            if (pressed) {
                                                //console.log("startX: "+startX)
                                                if (joyStick1Pressed(startX, startY)) {
                                                    point1IsJoystick1 = true
                                                }
                          
                                                if (joyStick2Pressed(startX, startY)) {
                                                    point1IsJoystick2 = true
                                                }
                                            }
                                            else {
                                                point1IsJoystick2 = false
                                                point1IsJoystick1 = false
                                            }
                          
                                        }
                          
                                        onXChanged: {
                                            console.log("startX: "+startX)
                                            if (point1IsJoystick1) {
                                                joyStick1BtnMove(x, y)
                                            }
                          
                                            if (point1IsJoystick2) {
                                                joyStick2BtnMove(x, y)
                                            }
                                        }
                          
                                        onYChanged: {
                                            console.log("startX: "+startX)
                                            if (point1IsJoystick1) {
                                                joyStick1BtnMove(x, y)
                                            }
                          
                                            if (point1IsJoystick2) {
                                                joyStick2BtnMove(x, y)
                                            }
                                        }
                          
                          
                          
                                    },
                                    TouchPoint {
                                        id: point2
                          
                                        onPressedChanged: {
                                            if (pressed) {
                                                //console.log("startX: "+startX)
                                                if (joyStick1Pressed(startX, startY)) {
                                                    point2IsJoystick1 = true
                                                }
                          
                                                if (joyStick2Pressed(startX, startY)) {
                                                    point2IsJoystick2 = true
                                                }
                                            }
                                            else {
                                                point2IsJoystick2 = false
                                                point2IsJoystick1 = false
                                            }
                          
                                        }
                          
                                        onXChanged: {
                                            console.log("startX: "+startX)
                                            if (point2IsJoystick1) {
                                                joyStick1BtnMove(x, y)
                                            }
                          
                                            if (point2IsJoystick2) {
                                                joyStick2BtnMove(x, y)
                                            }
                                        }
                          
                                        onYChanged: {
                                            console.log("startX: "+startX)
                                            if (point2IsJoystick1) {
                                                joyStick1BtnMove(x, y)
                                            }
                          
                                            if (point2IsJoystick2) {
                                                joyStick2BtnMove(x, y)
                                            }
                                        }
                          
                                    }
                          
                                ]
                          
                          
                                Rectangle {
                                  id: joystick1
                                  width: 50
                                  height: 150
                                  color: "gray"
                                  radius: 25
                                  x: 150
                                  y: 20
                                }
                          
                                Rectangle {
                                  id: joystick1Btn
                                  width: 50
                                  height: 50
                                  radius: 25
                                  color: "blue"
                                  x: joystick1.x
                                  y: joystick1.y
                                }
                          
                          
                                Rectangle {
                                  id: joystick2
                                  width: 150
                                  height: 50
                                  x: 300
                                  y: 200
                                  color: "gray"
                                  radius: 25
                                }
                          
                                Rectangle {
                                  id: joystick2Btn
                                  width: 50
                                  height: 50
                                  radius: 25
                                  color: "blue"
                                  x: joystick2.x
                                  y: joystick2.y
                                }
                          
                              }//MultiPointTouchArea
                          
                          
                          
                              function joyStick1Pressed(xx, yy) {
                                  if (    xx >= joystick1Btn.x && xx <= joystick1Btn.x+joystick1Btn.width
                                          && yy >= joystick1Btn.y && yy <= joystick1Btn.y+joystick1Btn.height) {
                                      console.log("click inside joystick1")
                                      return true;
                                  }
                                  else {
                                      console.log("click outside joystick1")
                                      return false;
                                  }
                              }
                          
                              function joyStick1BtnMove(xx, yy) {
                                  if (yy > joystick1.y+joystick1.height-joystick1Btn.height)
                                      joystick1Btn.y = joystick1.y+joystick1.height-joystick1Btn.height
                                   else if(yy < joystick1.y)
                                      joystick1Btn.y = joystick1.y
                                  else
                                      joystick1Btn.y = yy
                              }
                          
                          
                          
                              function joyStick2Pressed(xx, yy) {
                                    if (    xx >= joystick2Btn.x && xx <= joystick2Btn.x+joystick2Btn.width
                                          && yy >= joystick2Btn.y && yy <= joystick2Btn.y+joystick2Btn.height) {
                                      //console.log("click inside joystick2")
                                      return true;
                                  }
                                  else {
                                      //console.log("click outside joystick2")
                                      return false;
                                  }
                              }
                          
                              function joyStick2BtnMove(xx, yy) {
                                  if (xx < joystick2.x)
                                      joystick2Btn.x = joystick2.x
                                   else if(xx > joystick2.x+joystick2.width-joystick2Btn.width)
                                      joystick2Btn.x = joystick2.x+joystick2.width-joystick2Btn.width
                                  else
                                      joystick2Btn.x = xx
                              }
                          
                          
                          
                          
                          T Offline
                          T Offline
                          TheGringerEye
                          wrote on last edited by
                          #12

                          @johngod Okay, Thanks, i try it.

                          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