我有一个 QGraphicsView。为此,我添加了 QGraphicsScene,并添加了 QPixmap(*.jpeg) 和 QGraphicsEllipseItem(a circle)。QPixmap 比 QGraphicsView 大得多,因此启用了滚动。问题是 QPixmap 和 QGraphicsEllipseItem 都在移动。但我想要 QGraphicsView 中 QGraphicsEllipseItem 的固定位置。它应该始终位于 QGraphicsView 的中心。我怎样才能做到这一点?希望有人可以提供帮助。
问问题
2627 次
2 回答
1
为滚动条的滚动信号添加信号处理程序(使用QAbstractSlider::sliderMoved()
)。
然后您可以查询视图的左/上偏移量和大小,并相应地定位圆。请参阅QAbstractScrollArea的说明以帮助您入门。
于 2010-09-01T14:52:51.657 回答
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 回答