Qt Forum

    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Unsolved

    Qt Academy Launch in California!

    MouseArea & Multitouch

    QML and Qt Quick
    5
    15
    13504
    Loading More Posts
    • 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.
    • F
      feldifux last edited by

      Hi,
      I would like to move several QML items independently by using MouseAreas. However, a second touch does not generate a new pressed-event but a positionChanged for the first touch. So this is what I tried, which should allow dragging the 2 rectangles independently with 2 fingers:
      @
      Item {
      width: 400
      height: 400

      Rectangle {
          x:30
          y: 30
          width: 100
          height: 100
          color: "blue"
      
          MouseArea {
              anchors.fill: parent
              drag.target: parent
          }
      }
      
      Rectangle {
          x:parent.width-130
          y: parent.height-130
          width: 100
          height: 100
          color: "red"
      
          MouseArea {
              anchors.fill: parent
              drag.target: parent
          }
      }
      

      }
      @

      As far as I have seen in QWidget::event() in qwidget.cpp of gui kernel, the touchEvents should get converted automatically to MouseEvents. I am using the QmlApplicationViewer for displaying my qml files, and also setting Qt::WA_AcceptTouchEvents did not change this behavior.

      Is there a way I could use the MouseArea with independent touches, or which other approach could I use?

      Founder of Felgo SDK - http://felgo.com/qt

      Felgo simplifies

      • Mobile App Dev with Qt esp. iOS & Android
      • Game Development with Qt

      What others say

      Felgo scored #1 in Cross-Platform App Development Tools Report - see why: https://goo.gl/rgp3rq

      1 Reply Last reply Reply Quote 0
      • A
        agocs last edited by

        MouseArea is inherently mouse event based and won't work very well with multi touch. In Qt 5 you could just use MultiPointTouchArea instead of MouseArea. If this is 4.x then there is no ready-made QML element available so you either handle touch events in C++ or experiment with the (possibly obsolete) TouchArea element from http://qt.gitorious.org/qt-labs/qml-toucharea

        1 Reply Last reply Reply Quote 0
        • F
          feldifux last edited by

          Thanks!
          So I'll implement my own item in C++ handling touch events, which has the same API as MouseArea so it is easy to use existing code with it. Because from a QML-user perspective, I would like to have an item where I dont have to care how many touchpoints there are, but only if there was a touch in the area I defined. So like a MultiPointTouchArea with a single touchPoint.

          Founder of Felgo SDK - http://felgo.com/qt

          Felgo simplifies

          • Mobile App Dev with Qt esp. iOS & Android
          • Game Development with Qt

          What others say

          Felgo scored #1 in Cross-Platform App Development Tools Report - see why: https://goo.gl/rgp3rq

          1 Reply Last reply Reply Quote 0
          • A
            aabc last edited by

            Does MultiPointTouchArea works well with single touch ?

            1 Reply Last reply Reply Quote 0
            • A
              agocs last edited by

              [quote author="aabc" date="1337500924"]Does MultiPointTouchArea works well with single touch ?[/quote]

              Yes, its feature set is however somewhat different and lower-level when compared to MouseArea. In most single-touch cases MouseArea is still the preferred solution.

              1 Reply Last reply Reply Quote 0
              • A
                aabc last edited by

                Isn't MouseArea designed for Mouse and not for Touch ?
                When you say "preferred solution" you mean performance or programming ?

                1 Reply Last reply Reply Quote 0
                • A
                  alexleutgoeb last edited by

                  MouseArea only listens for MouseEvents and therefore is designed for mouse related input methods, that's right.

                  Symbian for example however sends for each first touch (primary touch) a related mouse event, and touch events received from a qwidget get converted to mouse events too (if the touches are not primary).

                  So if you're only interested in single touch events the MouseArea is the easiest way to go (and therefore the "preferred solution"?), if you require advanced multitouch recognition you've to look at PinchArea, TouchArea or your own custom implementation, as Christian probably does for now.

                  Alex

                  1 Reply Last reply Reply Quote 0
                  • A
                    aabc last edited by

                    My problem is that The MouseArea works fine with stylus but poor with fingrer touch.
                    Did you encounter that problem ?

                    1 Reply Last reply Reply Quote 0
                    • A
                      alexleutgoeb last edited by

                      Didn't have any problems so far in general. Which platform are you testing on? And what's your definition of "poor"? ;) Are the events in-accurate? Are you losing your drag events?

                      1 Reply Last reply Reply Quote 0
                      • A
                        aabc last edited by

                        My target is Embedded Linux over Freescale IMX53.
                        In poor I mean that QML elements like flickable and lists are dragged in a very bad way when I use finger comparing to stylus (very unaccurate and hard to drag)

                        1 Reply Last reply Reply Quote 0
                        • A
                          alexleutgoeb last edited by

                          I've no experience with that but I'm pretty sure your problem isn't related to the Qt Quick MouseArea implementation. (I would guess the hardware drivers or probably the hardware itself is rather inaccurate with handling touch events?)

                          1 Reply Last reply Reply Quote 0
                          • A
                            aabc last edited by

                            Did you use Qt Quick over touch devices ?

                            1 Reply Last reply Reply Quote 0
                            • A
                              alexleutgoeb last edited by

                              Only on Symbian/Meego ones, there it is working like intended...

                              1 Reply Last reply Reply Quote 0
                              • A
                                agocs last edited by

                                [quote author="alexleutgoeb" date="1337769088"]MouseArea only listens for MouseEvents and therefore is designed for mouse related input methods, that's right.

                                So if you're only interested in single touch events the MouseArea is the easiest way to go (and therefore the "preferred solution"?), if you require advanced multitouch recognition you've to look at PinchArea, TouchArea or your own custom implementation, as Christian probably does for now.

                                [/quote]

                                Exactly. With MultiPointTouchArea many traditional mouse/single-touch tasks like click or double click detection, simple dragging support, etc. will become more complicated while with MouseArea these are available out of the box. MultiPointTouchArea is not meant to replace MouseArea, it rather complements it.

                                1 Reply Last reply Reply Quote 0
                                • S
                                  sibislaw2 last edited by

                                  [quote author="feldifux" date="1337275306"]Thanks!
                                  So I'll implement my own item in C++ handling touch events, which has the same API as MouseArea so it is easy to use existing code with it. Because from a QML-user perspective, I would like to have an item where I dont have to care how many touchpoints there are, but only if there was a touch in the area I defined. So like a MultiPointTouchArea with a single touchPoint.[/quote]

                                  Could you share code with us or at least tell how to do this ?

                                  1 Reply Last reply Reply Quote 0
                                  • First post
                                    Last post