我使用的是带有Lubuntu18.04的多点触控显示器(EIZO DuraVision FDF2382WT)。我有一个以QLabel作为小部件的QScrollArea。QLabel有一个QPixmap。用两个或更多的手指触摸它可滚动图片。这一切为什么要发生?根据我对the documentation的理解,QTouchEvent处理是可选的,除了总是接收它们的QWindows。
我尝试将AA_SynthesizeMouseForUnhandledTouchEvents设置为False,将QScrollArea的WA_AcceptTouchEvents和QLabel设置为True和False。我看不到任何变化。我尝试重新实现QScrollArea.event、QScrollArea.scroll、QLabel.event和滚动条setValue来记录调用,但是什么都没有打印出来。
import sys
from PyQt5 import Qt
qapp = Qt.QApplication(sys.argv)
picture = Qt.QPixmap('picture.png')
qlab = Qt.QLabel()
qlab.setPixmap(picture)
qsa = Qt.QScrollArea()
qsa.setWidget(qlab)
qsa.setGeometry(10, 30, 200, 200)
qsa.show()
sys.exit(qapp.exec_())我原以为图片会留在原地,结果却被拖走了。使用鼠标拖动或仅用一根手指拖动时,不会发生任何反应。
发布于 2019-08-27 22:19:58
最后我解决了这个问题:那就是gestures!我用像这样的东西残害了他们
import sys
from PyQt5 import Qt
qapp = Qt.QApplication(sys.argv)
picture = Qt.QPixmap('picture.png')
qlab = Qt.QLabel()
qlab.setPixmap(picture)
MyScrollArea = Qt.QScrollArea
def event(self, event):
print('DEBUG: event type {}'.format(event.type()))
if event.type() in (Qt.QEvent.Gesture, Qt.QEvent.GestureOverride):
event.accept()
return True
else:
return super(MyScrollArea, self).event(event)
MyScrollArea.event = event
qsa = MyScrollArea()
qsa.setWidget(qlab)
qsa.setGeometry(10, 30, 200, 200)
qsa.show()
sys.exit(qapp.exec_())https://stackoverflow.com/questions/57433742
复制相似问题