gpt4 book ai didi

python - 根据子项 'resizer' 项的位置调整 QGraphicsItem 的大小

转载 作者:行者123 更新时间:2023-11-30 05:26:19 26 4
gpt4 key购买 nike

<分区>

我正在尝试创建一个最小的 QGraphicsItem 作为其父对象的缩放器。我想我快到了,但我正在画一个空白,以及如何在移动时将其位置传达给父项。我想要的看起来像这样(没有文字):

enter image description here

这是我目前所拥有的一个独立示例:

import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *


class Resizer(QGraphicsEllipseItem):

def __init__(self, rect=QRectF(0, 0, 10, 10), parent=None, scene=None):
super().__init__(rect, parent, scene)

self.setFlag(QGraphicsItem.ItemIsMovable, True)

def mousePressEvent(self, mouseEvent):
self.resize = True
self.initialPos = self.scenePos()
self.setSelected(True)

def mouseMoveEvent(self, mouseEvent):
if self.resize:
self.currentPos = self.scenePos()
self.change = self.initialPos - self.currentPos
super().mouseMoveEvent(mouseEvent)

def mouseReleaseEvent(self, mouseEvent):
self.resize = False
self.setSelected(False)


if __name__ == "__main__":

app = QApplication(sys.argv)

view = QGraphicsView()
scene = QGraphicsScene()
scene.setSceneRect(0, 0, 500, 500)
view.setScene(scene)

rect = QRectF(100, 100, 150, 50)
box = QGraphicsRectItem(rect)

scene.addItem(box)

resizer = Resizer(parent=box)
resizerWidth = resizer.rect().width() / 2
resizerOffset = QPointF(resizerWidth, resizerWidth)
resizer.setPos(box.rect().bottomRight() - resizerOffset)

view.show()

sys.exit(app.exec_())

那么我怎样才能将 mouseMoveEvent 中的 self.change 传递给父级,使父级调整为 Resizer 的大小被感动?欢迎任何其他建议。

我已经尝试将 Resizer 转换为 QGraphicsObject 的子类,以便它可以在 mouseMoveEvent 上发出信号,但是 QGraphicsObject 没有绘画方法,我不确定如何在场景中显示 Resizer

欢迎就此提出任何建议。

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