MouseArea & Multitouch
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?
13 replies
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
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.
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
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.
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.
You must log in to post a reply. Not a member yet? Register here!


