2

QGraphicsView があります。それに QGraphicsScene を追加し、それに QPixmap(*.jpeg) と QGraphicsEllipseItem(円) を追加しました。QPixmap は QGraphicsView よりもはるかに大きいため、スクロールが有効になっています。問題は、QPixmap と QGraphicsEllipseItem の両方が動いていることです。しかし、QGraphicsView の QGraphicsEllipseItem の固定位置が必要です。常に QGraphicsView の中心にある必要があります。どうやってやるの?誰かが助けてくれることを願っています。

4

2 に答える 2

1

をサブクラス化QGraphicsViewすると、メソッドをオーバーライドしてscrollContentsBy、スクロール領域が変更されるたびに楕円の位置を設定できます。ここにいくつかの本当に最小限のコードがあります:

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()
于 2010-12-05T21:19:18.980 に答える
1

スクロール バーのスクロール シグナルのシグナル ハンドラを追加します ( を使用QAbstractSlider::sliderMoved())。

次に、ビューの左/上オフセットとサイズを照会し、それに応じて円を配置できます。開始するには、 QAbstractScrollAreaの説明を参照してください。

于 2010-09-01T14:52:51.657 に答える