[Interest] Handling stylus input on a tablet in QML/QtQuick

Thorsten Hofer-Schmitz thorsten.schmitz.bn.90 at gmail.com
Mon Apr 20 10:17:28 CEST 2020


Hi

I have seen that bug report, but didn't understand at as "try Qt5.15". 
Just tried it and it seems to work mostly. Hovering also works. But 
there is a bug somewhere. On my Huawei, finger touch causes a hover 
event to start/end (happend in 5.14.2 as well). In the example, if you 
start hover, you can touch the tile once and it becomes red to indicate 
hovering, and a second touch ends it. I can also use my pen for 
hovering, and just like finger touch a press makes the tile permanently 
red. But with my pen I can't end hovering, I have to touch it with my 
finger for that.

I don't understand the problems with pen input in QtQuick. QTabletEvent 
works just fine, in QWidget and QtQuick. The engine just converts the 
event. Why not just use that, unlike HandlerPoint it supports tilt and 
tangetial pressure as well. It's just missing hovering, which Qt for 
some reason tied to QApplication/QWidget. And that code should be 
movable to QGuiApplication, the events come from the host after all, Qt 
is just processing them. That doesn't make sense to me (as someone who 
doesn't know much about the interals of this).

Am 20.04.2020 um 06:07 schrieb Shawn Rutledge:
>
>> On 19 Apr 2020, at 01:16, Thorsten Hofer-Schmitz <thorsten.schmitz.bn.90 at gmail.com> wrote:
>>
>> Hi
>>
>> I'm trying to handle the input of a stylus on a tablet. Qt has an example on how to do this using a QWidget-based application. I tested it on my tablet and everything works fine.
>>
>> I would like to do this in QML/QtQuick. The documentation suggests that PointHandler, like this:
>>
>> import QtQuick 2.14
>> import QtQuick.Window 2.14
>>
>> Window {
>>     visible: true
>>     width: 640
>>     height: 480
>>     title: qsTr("Hello World")
>>
>>     PointHandler
>>     {
>>         acceptedDevices: PointerDevice.Stylus
>>         acceptedPointerTypes: PointerDevice.Pen
>>         onActiveChanged: console.log("Pen Input")
>>     }
>>
>> }
> It should work in 5.15: see also QTBUG-79660 and the tablet manual test in qtdeclarative/tests/manual/pointer.
>
>> I experimented with eventFilter's to intercept QTabletEvent's before they are converted into mouse events by the QQuickWindow (as far as I can tell). But unless there is a QWidget with WA_TabletTracking=true as target (and some other options as it seems, because just a QMainWindow with a widget isn't enough) I can't recieve TabletEnterProximity-events for hovering.
> Those are currently not delivered to the main window, only to the application.  So you still need a C++ subclass in Qt 5, as in qtbase/examples/widgets/widgets/tablet/tabletapplication.cpp.  I’m hoping to get more complete proximity event delivery in place in Qt 6.
>



More information about the Interest mailing list