gpt4 book ai didi

pyqt4 - 当 ItemIgnoresTransformations 打开时 QGraphicsView 的 fitInView 出现问题

转载 作者:行者123 更新时间:2023-12-04 05:30:20 32 4
gpt4 key购买 nike

在尝试实现项目大小不变但项目之间的距离被放大的场景时,我遇到了以下代码的问题,该代码绘制了一个矩形和文本“A”。现在,如果我在矩形项目上设置标志 ItemIgnoresTransformations,放大会导致矩形消失(单击并在矩形周围拖动鼠标按钮)。但在文本的情况下不会发生这种情况。此外,fitInView 设置的新视口(viewport)区域与我要求的非常不同:

import sys
from PyQt4 import QtCore, QtGui

class GV(QtGui.QGraphicsView):
def __init__(self, *args, **kwargs):
QtGui.QGraphicsView.__init__(self, *args, **kwargs)

def mousePressEvent(self, event):
pos = QtCore.QPoint(event.pos())
self.startPos = pos

def mouseReleaseEvent(self, event):
pos = QtCore.QPoint(event.pos())
self.endPos = pos
rect = QtCore.QRect(self.startPos, self.endPos)
sceneRect = self.mapToScene(rect).boundingRect()
print 'Selected area: viewport coordinate:', rect, \
', scene coordinate:', sceneRect
self.fitInView(sceneRect)
print 'new viewport in scene coordinates:', \
self.mapToScene(self.viewport().geometry()).boundingRect()

class Scene(QtGui.QGraphicsScene):
def __init__(self, *args, **kwargs):
QtGui.QGraphicsScene.__init__(self, *args, **kwargs)
self.itemA = QtGui.QGraphicsSimpleTextItem('A')
self.itemA.setPos(20, 20)
self.itemA.setFlag(QtGui.QGraphicsItem.ItemIgnoresTransformations, True)
self.addItem(self.itemA)
self.itemB = QtGui.QGraphicsRectItem(30, 50, 20, 20)
self.addItem(self.itemB)
self.itemB.setFlag(QtGui.QGraphicsItem.ItemIgnoresTransformations, True)

if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
widget = QtGui.QMainWindow()
scene = Scene()
view = GV(scene, widget)
widget.setCentralWidget(view)
widget.show()
app.exec_()

任何解释将不胜感激!

最佳答案

事实上,矩形并没有消失。但它“奇怪地”移动。

self.itemB = QtGui.QGraphicsRectItem(30, 50, 20, 20)

这条线可能不是你想要的。这将创建一个项目并从 (30, 50) 开始放置一个矩形/正方形在本地坐标。然后将其添加到场景中。这会为您提供一个锚定在 (0, 0) 的项目, 跨越 (50, 70)但只在右下角绘制一个矩形 20x20 .

当您设置 ItemIgnoresTransformations , item 在缩放的情况下无法进行常规转换。场景放大,为了让 item 忽略这种转换,它本身有点“缩小”。但它仍然锚定在 (0, 0)并且矩形在右下角,所以绘制的矩形向左上角移动。

解决方案相当简单。不要在局部坐标中创建你的矩形,即你的矩形应该从 (0, 0) 开始你应该明确定位它。这意味着:

self.itemB = QtGui.QGraphicsRectItem(0, 0, 20, 20)
self.itemB.setPos(30, 50)

关于pyqt4 - 当 ItemIgnoresTransformations 打开时 QGraphicsView 的 fitInView 出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12713385/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com