我在 Lubuntu 18.04 上使用多点触控显示器 (EIZO DuraVision FDF2382WT)。 我有一个带有 QLabel 作为小部件的 QScrollArea。 QLabel 有一个 QPixmap。用两根或更多手指触摸它可滚动图片。为什么会这样?据我了解the documentation 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_())
我原以为图片会留在原地,但它被拖了。使用鼠标或仅用一根手指拖动时没有任何反应。
最佳答案
最后我解决了这个问题:它是 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_())
关于linux - 为什么 QScrollArea 即使没有人告诉它也会在多点触控上滚动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57433742/