qgraphicsview鼠标移动图片_如何在中间鼠标的QGraphicsView中滚动QGraphicsScene?
我使用pyqt4.8和python2.7
我創建QGraphicsView并插入QGraphicsScene.比View更大的場景,需要滾動.視圖有垂直和水平滾動,但我想通過鼠標中鍵滾動.
我創建鼠標事件功能,但運動到奇怪.
def mousePressEvent(self, event):
self.__mousePressPos = None
self.__mouseMovePos = None
if event.button() == Qt.MidButton:
self.__mousePressPos = event.globalPos()
self.__mouseMovePos = event.globalPos()
else:
super(MyView, self).mousePressEvent(event)
def mouseMoveEvent(self, event):
if event.buttons() == Qt.MidButton:
curPos = self.__mousePressPos - self.__mouseMovePos
self.centerOn(curPos.x(), curPos.y())
self.__mouseMovePos = globalPos
else:
super(MyView, self).mouseMoveEvent(event)
def mouseReleaseEvent(self, event):
if self.__mousePressPos is not None:
moved = event.globalPos() - self.__mousePressPos
if moved.manhattanLength() > 3:
event.ignore()
return
super(MyView, self).mouseReleaseEvent(event)
首先,場景移動與鼠標的移動不對應.我懷疑是視口的相對大小和場景的責任.以及舞臺的規模.
其次,我無法移動視口外的場景,它到達邊緣時停止.
讓第二個仍然可以容忍.讓它保持原樣,但如何計算正確移動的場景的正確偏移移動鼠標,無論它被捕獲的位置?
解決方法:
我的解決方案不是調用centerOn方法,而是使用QGraphicView的滾動條:
class MyView(QtGui.QGraphicsView):
def mousePressEvent(self, event):
if event.button() == Qt.MidButton: # or Qt.MiddleButton
self.__prevMousePos = event.pos()
else:
super(MyView, self).mousePressEvent(event)
def mouseMoveEvent(self, event):
if event.buttons() == Qt.MidButton: # or Qt.MiddleButton
offset = self.__prevMousePos - event.pos()
self.__prevMousePos = event.pos()
self.verticalScrollBar().setValue(self.verticalScrollBar().value() + offset.y())
self.horizontalScrollBar().setValue(self.horizontalScrollBar().value() + offset.x())
else:
super(MyView, self).mouseMoveEvent(event)
標簽:qgraphicsview,python,pyqt,mouseevent,qgraphicsscene
來源: https://codeday.me/bug/20190824/1709005.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的qgraphicsview鼠标移动图片_如何在中间鼠标的QGraphicsView中滚动QGraphicsScene?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大数据审计的发展_从历史的角度看大数据审
- 下一篇: element ui走马灯怎么添加_Lo