首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么QScrollArea在没有人告诉它的情况下也要滚动多点触控?

为什么QScrollArea在没有人告诉它的情况下也要滚动多点触控?
EN

Stack Overflow用户
提问于 2019-08-10 00:06:30
回答 1查看 120关注 0票数 0

我使用的是带有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来记录调用,但是什么都没有打印出来。

代码语言:javascript
复制
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_())

我原以为图片会留在原地,结果却被拖走了。使用鼠标拖动或仅用一根手指拖动时,不会发生任何反应。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-27 22:19:58

最后我解决了这个问题:那就是gestures!我用像这样的东西残害了他们

代码语言:javascript
复制
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_())
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57433742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档