日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

qgraphicsview鼠标移动图片_如何在中间鼠标的QGraphicsView中滚动QGraphicsScene?

發(fā)布時(shí)間:2025/3/21 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 qgraphicsview鼠标移动图片_如何在中间鼠标的QGraphicsView中滚动QGraphicsScene? 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

我使用pyqt4.8和python2.7

我創(chuàng)建QGraphicsView并插入QGraphicsScene.比View更大的場(chǎng)景,需要滾動(dòng).視圖有垂直和水平滾動(dòng),但我想通過(guò)鼠標(biāo)中鍵滾動(dòng).

我創(chuàng)建鼠標(biāo)事件功能,但運(yùn)動(dòng)到奇怪.

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)

首先,場(chǎng)景移動(dòng)與鼠標(biāo)的移動(dòng)不對(duì)應(yīng).我懷疑是視口的相對(duì)大小和場(chǎng)景的責(zé)任.以及舞臺(tái)的規(guī)模.

其次,我無(wú)法移動(dòng)視口外的場(chǎng)景,它到達(dá)邊緣時(shí)停止.

讓第二個(gè)仍然可以容忍.讓它保持原樣,但如何計(jì)算正確移動(dòng)的場(chǎng)景的正確偏移移動(dòng)鼠標(biāo),無(wú)論它被捕獲的位置?

解決方法:

我的解決方案不是調(diào)用centerOn方法,而是使用QGraphicView的滾動(dòng)條:

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)

標(biāo)簽:qgraphicsview,python,pyqt,mouseevent,qgraphicsscene

來(lái)源: https://codeday.me/bug/20190824/1709005.html

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的qgraphicsview鼠标移动图片_如何在中间鼠标的QGraphicsView中滚动QGraphicsScene?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。