我有一个QGraphicsView。为此,我添加了一个QGraphicsScene,并添加了一个QPixmap(* .jpeg)和QGraphicsEllipseItem(一个圆)。 QPixmap比QGraphicsView大得多,所以可以滚动。问题是QPixmap和QGraphicsEllipseItem都在移动。但是我想为QGraphicsView中的QGraphicsEllipseItem定位。它应该始终位于QGraphicsView的中心。 我该怎么做?希望有人能帮忙。Pyqt:如何在滚动可能的情况下将项目始终放置在QGraphicsView的中心?
2
A
回答
1
为滚动条的滚动信号添加信号处理程序(使用QAbstractSlider::sliderMoved()
)。
然后,您可以查看视图的左/上偏移量和大小,并相应地定位圆。请参阅QAbstractScrollArea的说明以帮助您入门。
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()
相关问题
- 1. 带有自动项目放置的QGraphicsView
- 2. PyQt在QGraphicsView中移动垂直滚动条位置
- 3. 缩放时,div在某些情况下不放置滚动条
- 4. PyQt的:在的QGraphicsView
- 5. 如何在没有任何滚动条的情况下将bootstrap模态定位在中心位置?
- 6. 如何在不滚动的情况下触发滚动事件
- 7. 如何在没有项目的情况下滚动浏览DataGrid列?
- 8. 如何在放心的情况下解决java.lang.java.lang.NoSuchFieldError:DEF_CONTENT_CHARSET?
- 9. 可能在未滚动所有div的情况下滑动下一个div?
- 10. PyQt QGraphicsView未能setWindowIcon
- 11. 在这种情况下,如何使用android中的滚动条?
- 12. 滚动条始终在CollapsiblePanelExtender中可见
- 13. 如何在不按下按钮的情况下开始活动?
- 14. 如何使滚动条在QML中的Flckable上始终可见
- 15. UIScrollView如何在滚动/抖动的情况下滚动得如此之好?
- 16. 在不改变分层位置的情况下在IB中移动项目
- 17. 如何在不使用Eclipse的情况下手动将项目添加到Eclipse
- 18. 在拖放项目时滚动项目
- 19. 在滚动网格的情况下gridview的情况下的重复图像?
- 20. 在没有viewBox的情况下围绕中心进行缩放?
- 21. 在我的情况下,溢出-x不能滚动
- 22. 默认情况下在左侧设置div的滚动条
- 23. 如何在Extjs可编辑网格中始终可见的情况下制作嵌入式下拉列表?
- 24. 如何在没有Bg图像的情况下滚动Unity ScrollView?
- 25. RecycleView:如何在没有滚动的情况下转到一行
- 26. 如何在不剪裁的情况下关闭滚动条?
- 27. 如何始终使UIScrollView可滚动?
- 28. 如何使UIScrollView始终可滚动
- 29. 如何在Android中滚动时放大Recycler查看中心项目?
- 30. 如何在没有页面滚动的情况下制作div滚动?
我试过了,但是我没有收到任何信号。但我仍然会尝试。 谢谢。 – user427305 2010-09-02 18:17:08
好吧,它适用于graphicsView.viewport()。installEventFilter(self)和graphicsView.setViewportUpdateMode(0)。现在可以捕捉mouseMove事件。这不是最好的方式,但它的工作原理。 – user427305 2010-09-03 03:13:21
我不会抓住鼠标移动。总之,如果您以后需要移动视图程序,该怎么办?将不会有一个mouseMove赶上。更好地绑定到滚动条信号。 – 2010-09-06 10:20:31