QTapGesture在QTabWidget上的位置

问题描述

在接受QTapGesture的QTabWidget上,点击会生成3个事件:第一个事件的手势状态为GestureStarted,第二个事件的手势状态为GestureUpdated,第三个事件的手势状态为GestureFinished。 QTapGesture.position()返回的QPointF在第一个事件和其他事件之间是不同的。看起来第一个值是相对于整个QTabWidget的,而其他两个值是相对于QStackedWidget的。区别在于QTabBar的大小。我希望所有情况下的职位都保持不变。在不继承qtabbar和qtabwidget子类的情况下,如何知道全局抽头位置? 我正在从标准存储库中运行Ubuntu 19.10 eoan,python3-pyqt5 5.12.3。

$ python3 minimal_tap_on_qtabwidget.py 
tap state 1
tap position PyQt5.QtCore.QPointF(108.02645874023438,64.21989440917969)
tabBar size PyQt5.QtCore.QSize(85,35)
tap state 2
tap position PyQt5.QtCore.QPointF(106.02645874023438,29.219894409179688)
tabBar size PyQt5.QtCore.QSize(85,35)
tap state 3
tap position PyQt5.QtCore.QPointF(106.02645874023438,35)

在此处,向北具有标准的tabBar,不同之处在于Y坐标。使用向西的tabBar时,差异将在X坐标上。

# minimal_tap_on_qtabwidget.py
import sys

from PyQt5 import Qt,QtCore


class TabWidget(Qt.QTabWidget):

    def __init__(self,*args,**kwargs):
        super(TabWidget,self).__init__(*args,**kwargs)
        self.addTab(Qt.QWidget(),Qt.QIcon(),'mytab')
        self.grabGesture(QtCore.Qt.TapGesture)

    def event(self,event):
        if event.type() == Qt.QEvent.Gesture:
            return self.on_gesture_event(event)
        return super(TabWidget,self).event(event)

    def on_gesture_event(self,gesture_event):
        gesture_event.accept()
        tap = gesture_event.gesture(QtCore.Qt.TapGesture)
        if tap:
            print('tap state {}'.format(tap.state()))
            self.on_tap(tap)
        return True

    def on_tap(self,tap_gesture):
        tap_pos = tap_gesture.position()
        print('tap position {}'.format(tap_pos))
        print('tabBar size {}'.format(self.tabBar().size()))


def main():
    qapp = Qt.QApplication([])
    qapp.setAttribute(QtCore.Qt.AA_SynthesizeMouseForUnhandledTouchEvents,False)
    tab_widget = TabWidget()
    tab_widget.show()
    sys.exit(qapp.exec_())


if __name__ == '__main__':
    main()

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...