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

标签 linux python-3.x qt5 pyqt5

我在 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/

相关文章:

linux - 在 linux 服务器上获取 CPU 核心电压值

java - 如何在 ubuntu 上安装 Java Media Framework (JMF)

linux - 将特定列从二进制转换为十进制的 Shell 脚本

Python 正则表达式中 z 补一

python - Pandas 数据帧 : Grouping columns having the same first characters

python - Qt5 qmake-找不到合适的Python 2版本

linux - 如何访问 mplayer 输出/知道 mplayer 视频何时停止播放?

python - 如何从不同长度的子列表创建列表列表

linux - 当使用 -platform eglfs 运行 Qt5 应用程序时,i.MX6 上的 "EGL Error : could not create the EGL surface: error 0x300b"

c++ - qml 未知方法返回类型 : ArchiveFile*, 即使调用了 qmlRegisterUncreatableType