为什么QScrollArea在多点触控上滚动,即使没有人告诉它?



我正在使用带有Lubuntu 18.04的多点触控显示器(EIZO DuraVision FDF2382WT(。 我有一个QScrollArea,带有QLabel作为小部件。QLabel有一个QPixmap。用两根或多根手指触摸它会滚动图片。为什么会这样?根据我对文档的理解,QTouchEvent 处理是选择加入的,除了 QWindows 总是接收它们。

我尝试将AA_SynthesizeMouseForUnhandledTouchEvents设置为 False,将 QScrollArea 和 QLabel 的WA_AcceptTouchEvents设置为 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_())

我期待图片留在原地,而是被拖拽。用鼠标或仅用一根手指拖动时没有任何反应。

最后我解决了这个问题:这是手势! 我用类似的东西残酷地禁用了它们

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_())

相关内容

  • 没有找到相关文章

最新更新