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: 400Rectangle { 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?
-
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. -
[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.
-
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
-
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?
-
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?)
-
Only on Symbian/Meego ones, there it is working like intended...
-
[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.
-
[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 ?