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

发布于 2024-09-16 17:22:43 字数 270 浏览 4 评论 0原文

我有一个 QGraphicsView。我添加了一个 QGraphicsScene 并添加了 QPixmap(*.jpeg) 和 QGraphicsEllipseItem(一个圆圈)。 QPixmap 比 QGraphicsView 大得多,因此启用了滚动。问题是 QPixmap 和 QGraphicsEllipseItem 都在移动。但我想要 QGraphicsEllipseItem 在 QGraphicsView 中的固定位置。它应该始终位于 QGraphicsView 的中心。 我怎样才能做到这一点?希望有人能帮忙。

I have a QGraphicsView. To that I added a QGraphicsScene and to that a added an QPixmap(*.jpeg) and QGraphicsEllipseItem(a circle). The QPixmap is much more bigger than the QGraphicsView, so scrolling is enabled. The problem is that both QPixmap and QGraphicsEllipseItem are moving. But I want a fixed position for the QGraphicsEllipseItem in QGraphicsView. It should always be in the center of the QGraphicsView.
How can I do that? Hope someone can help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

瘫痪情歌 2024-09-23 17:22:43

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

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

Add a signal handler for the scroll signal of the scroll bars (use QAbstractSlider::sliderMoved()).

Then you can query the view for it's left/top offset and size and position the circle accordingly. See the explanation for QAbstractScrollArea to get you started.

你怎么这么可爱啊 2024-09-23 17:22:43

如果您子类化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()

If you subclass QGraphicsView, you can override the scrollContentsBy method to set the position of the ellipse whenever the scroll area changes. Here's some really minimal code:

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()
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文