[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