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?



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



  • Does MultiPointTouchArea works well with single touch ?



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



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



  • 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



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



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



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



  • 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?)



  • Did you use Qt Quick over touch devices ?



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


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.