[PyQt] Can't call QTest::touchEvent(&widget)

Phil Thompson phil at riverbankcomputing.com
Thu Apr 14 12:11:46 BST 2011


On Thu, 14 Apr 2011 13:57:09 +0400, Anton Chikin <kverlin.lists at gmail.com>
wrote:
> On Wed, Apr 13, 2011 at 9:09 PM, Phil Thompson
> <phil at riverbankcomputing.com> wrote:
>> On Wed, 13 Apr 2011 14:31:05 +0400, Anton Chikin
>> <kverlin.lists at gmail.com>
>> wrote:
>>> Hello All,
>>>
>>> I'm using PyQt version 4.8.3-2, shipped with Ubuntu 11.04 beta. While
>>> I was trying to use new multitouch testing function
>>> QTest::touchEvent() http://doc.qt.nokia.com/4.7/qtest.html#touchEvent
>>> I've come across the issue. This piece of code
>>>
>>> from PyQt4 import QtTest
>>> def testMT(self):
>>>        QtTest.QTest.touchEvent(self).press(0, QPoint(100,100))
>>>
>>> causes
>>>
>>> AttributeError: type object 'QTest' has no attribute 'touchEvent'
>>>
>>> I discovered that this function is not listed in PyQt4 docs.
>>> http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qtest.html
>>>
>>> Could you please give me some guidelines to resolve this?
>>> Thank you!
>>> Anton Chikin.
>>
>> Hmm - not sure how it got missed. It will be in tonight's snapshot.
>>
>> Thanks,
>> Phil
>>
> 
> Hi Phil,
> 
> I've come across another issue using multitouch test functions.
> Please have a look at QTouchEventSequence doc page
> http://doc.qt.nokia.com/4.7-snapshot/qtest-qtoucheventsequence.html
> I wrote the following sample to demonstrate the issue:
>
-------------------------------------------------------------------------------------
> import sys
> import inspect
> from PyQt4 import QtCore, QtGui, QtTest
> 
> class MyLabel(QtGui.QLabel):
>     def __init__(self, string, parent = None):
>         QtGui.QLabel.__init__(self, string, parent)
>         self.resize(500,300)
> 
>     def event(self, evt):
>         if evt.type() == QtCore.QEvent.TouchBegin:
>             print("TouchBegin!")
>         #Double click causes QTouchEvent to be sent
>         if evt.type() == QtCore.QEvent.MouseButtonDblClick:
>             print("Double click!")
>             self.testMT()
>         return QtGui.QLabel.event(self, evt)
> 
>     def testMT(self):
>         evSeq = QtTest.QTest.touchEvent(self)
>         print(inspect.getmembers(evSeq))
>         evSeq.press(0, QtCore.QPoint(10,10), self) #<------- Python
> crashes here!
>         print("MT event sent!")
>         return
> 
> if __name__ == "__main__":
>         app = QtGui.QApplication(sys.argv)
>         label = MyLabel("Hello!")
>         label.show()
>         app.exec_()
>         sys.exit()
>
--------------------------------------------------------------------------------------
> At the line, where I try to call QTouchEventSequence.press() - Python
> crashes with core dump.
> Is this the real issue or just I am doing wrong things?

It looks like QTouchEventSequence has a really dumb API which means it's
unusable in anything other that C++ code. You have to use the instance
immediately - you can't make a copy on the heap to pass around and use
later.

Unless anybody has any suggestions I'll remove it completely.

Phil


More information about the PyQt mailing list