親に対してリサイザとして機能する最小のQGraphicsItemを作成しようとしています。私はほとんどそこにいると思うが、空白を描いて、動いているときにその親アイテムにその位置を伝える方法。私は(テキストなし)次のようになりますためつもりだ:QGraphicsItemを子の「resizer」アイテムの位置に基づいてサイズ変更する
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_())
それでは、どのように私は伝えることができます。
そして、ここでは、私がこれまで持っているものの自己完結型の一例ですResizer
が移動されているときに親のサイズが変更されるように、がmouseMoveEvent
にありますか?他の提案は歓迎されます。
私はそれがmouseMoveEvent
上の信号を発することができるようにQGraphicsObject
のサブクラスにResizer
を変換しようとしましたが、QGraphicsObject
paintメソッドを持っていると私は現場にResizer
を表示する方法についてはわからないよされません。
これに関するアドバイスは大歓迎です。
@ダニエルパントリアルン私は多少なりとも同意します。私がそれを解決する方法は少し異なっています。私はそれが役に立つかもしれないために私の答えを掲示しています。 – pbreach
正確に。詐欺師に良い解決策を投稿することは、それ自体の特権です。しかし、それを元の質問に投稿した場合(新しいメリットがあると確信できる場合)、より多くの意見を得ることができます(Google検索でより多くの意見を表示する古い質問)。次回は注意してください。 –
@BhargavRao素晴らしい!アドバイスをいただきありがとうございます。 – pbreach