[Interest] iOS not delivering touch events

maitai maitai at virtual-winds.org
Wed Dec 30 08:40:01 CET 2015


Hello and happy new year to all

I have an application (qwidget based, no qml in that part) which makes 
heavy use of QtConcurrent::mapped(). Whenever the user touches the 
screen (or clicks on the mouse for the PC version), the QFuture is 
cancelled to be restarted later (a bit more complicated than that but 
that's the principle). This is running fine on Android, Windows, Linux, 
Mac/OS, but on iOS the touch event is triggered only after the QFuture 
finishes. Even worst, if the user finishes the gesture before the 
QFuture is finished, the touchbegin and touchupdate are delivered after 
a while but the touchend event is never triggered. So I end up in a 
situation where I don't have any finger on the device and 
QApplication::buttons() still reports leftButton. I have to touch the 
screen once to get it back to normal.

I have tried to put some QCoreApplication::flush() and some 
QApplication::processEvents() in some critical places such as 
resultReadyAt() etc, but qt still only receives the initial touch event 
(converted to a mousePress or not) only after the QFuture is finished, 
which can take several seconds.

My feeling is that the CPU is too busy to deliver the touch event even 
if it's supposed to run on another thread, and even if processEvents is 
called.

The very same application runs fine on Android, without any 
processevents or flush.

Any idea how I can force qt to treat touch events asap in that case and 
keep the application responsive?

Thanks
Philippe Lelong



More information about the Interest mailing list