Pyqt:当可以滚动时,如何设置项目始终位于QGraphicsView的中心?

Pyqt:当可以滚动时,如何设置项目始终位于QGraphicsView的中心?,pyqt,qgraphicsview,Pyqt,Qgraphicsview,我有一个QZ图形视图。为此,我添加了一个QGraphicscene,并添加了一个QPixmap(*.jpeg)和QGraphicsEllipseItem(一个圆)。QPixmap比QGraphicsView大得多,因此启用了滚动。问题是QPixmap和QGraphicsEllipseItem都在移动。但是我希望QGraphicsView中的QGraphicsSellipseitem有一个固定的位置。它应该始终位于QGraphicsView的中心。 我该怎么做?希望有人能帮忙 为滚动条的滚动信号添

我有一个QZ图形视图。为此,我添加了一个QGraphicscene,并添加了一个QPixmap(*.jpeg)和QGraphicsEllipseItem(一个圆)。QPixmap比QGraphicsView大得多,因此启用了滚动。问题是QPixmap和QGraphicsEllipseItem都在移动。但是我希望QGraphicsView中的QGraphicsSellipseitem有一个固定的位置。它应该始终位于QGraphicsView的中心。
我该怎么做?希望有人能帮忙

为滚动条的滚动信号添加一个信号处理程序(使用
QAbstractSlider::sliderMoved()


然后,您可以查询视图的左/顶偏移和大小,并相应地定位圆。请参阅的说明以开始操作。

如果子类
QGraphicsView
,则可以通过
方法覆盖
滚动内容,以便在滚动区域更改时设置椭圆的位置。下面是一些非常简单的代码:

import sys
from PyQt4 import QtGui

class MyView(QtGui.QGraphicsView):
    def __init__(self, scene, parent = None):
        super(MyView, self).__init__(parent)
        self.scene = scene
        self.setScene(scene)
        self.ellipse = QtGui.QGraphicsEllipseItem(0, 0, 30, 30, scene = self.scene)
        self.scene.addItem(self.ellipse)

    def scrollContentsBy(self, x, y):
        super(MyView, self).scrollContentsBy(x, y)
        self.ellipse.setPos(self.mapToScene(28, 28))

class MainWindow(QtGui.QMainWindow):
    def __init__(self, parent = None):
        super(MainWindow, self).__init__(parent)
        pixmap = QtGui.QPixmap()
        pixmap.load('imagefile.jpg')
        scene = QtGui.QGraphicsScene(self)
        scene.setSceneRect(0, 0, pixmap.width(), pixmap.height())
        item = QtGui.QGraphicsPixmapItem(pixmap)
        scene.addItem(item)
        self.view = MyView(scene, self)
        self.view.setMinimumSize(100, 100)

def main():
    app = QtGui.QApplication(sys.argv)
    mainWindow = MainWindow()
    mainWindow.show()
    app.exec_()

if __name__ == '__main__':
    main()

我试过了,但没有收到任何信号。但我还是会尝试的。谢谢。好的,它与graphicsView.viewport().installEventFilter(self)和graphicsView.setViewportUpdateMode(0)一起使用。现在可以捕捉mouseMove事件了。这不是最好的方法,但很管用。我不会动鼠标的。总之,如果以后需要以编程方式移动视图,该怎么办?就不会有老鼠移动了。最好绑定到滚动条信号。