0
私はQGraphicsItemのサブクラスを作成しています。このサブクラスは、ユーザーがクリックできる場所が異なります。 私の考えは、クリックされた各コンポーネントがmousePressEventを置き換えたQGraphicsItemのサブクラスを作成することです。問題は、このコンポーネントをQGraphicItemのサブクラスにどのようにマージできるかです。QGraphicsItemをpaint()メソッド内にペイントすることは可能ですか?
ここで私が試しているコードはありますが、paintメソッドのすべてのコンポーネントを表示する方法はわかりません。
# -*- coding: utf-8 -*-
from PySide import QtGui, QtCore
class GraphicItemMain(QtGui.QGraphicsItem):
def __init__(self, x, y):
super(GraphicItemMain, self).__init__()
self.setFlag(QtGui.QGraphicsItem.ItemIsMovable, False)
self.setFlag(QtGui.QGraphicsItem.ItemIsSelectable, False)
self.setFlag(QtGui.QGraphicsItem.ItemIsFocusable, True)
self.setAcceptsHoverEvents(True)
self.x = x
self.y = y
def boundingRect(self):
return QtCore.QRectF(self.x, self.y, 100, 100)
def paint(self, painter, option, widget):
textComponent = GraphicItemTextClicked(5+self.x, 5+self.y)
ellipseComponent = GraphicItemEllipseClicked(5+self.x, 50+self.y)
#How I print this components?
class GraphicItemTextClicked(QtGui.QGraphicsItem):
def __init__(self, x, y):
super(GraphicItemTextClicked, self).__init__()
self.setFlag(QtGui.QGraphicsItem.ItemIsMovable, False)
self.setFlag(QtGui.QGraphicsItem.ItemIsSelectable, False)
self.setFlag(QtGui.QGraphicsItem.ItemIsFocusable, True)
self.setAcceptsHoverEvents(True)
self.x = x
self.y = y
def mousePressEvent(self, event):
#Do something
QtGui.QGraphicsItem.mousePressEvent(self, event)
def boundingRect(self):
return QtCore.QRectF(self.x, self.y, 80, 30)
def paint(self, painter, option, widget):
painter.setPen(QtGui.QPen(QtGui.QColor(255, 0, 0), 1))
font = QtGui.QFont()
font.setPointSize(12)
painter.setFont(font)
painter.drawText(QtCore.QPointF(3+self.x, self.y), "Same Text")
class GraphicItemEllipseClicked(QtGui.QGraphicsItem):
def __init__(self, x, y):
super(GraphicItemEllipseClicked, self).__init__()
self.setFlag(QtGui.QGraphicsItem.ItemIsMovable, False)
self.setFlag(QtGui.QGraphicsItem.ItemIsSelectable, False)
self.setFlag(QtGui.QGraphicsItem.ItemIsFocusable, True)
self.setAcceptsHoverEvents(True)
self.x = x
self.y = y
def mousePressEvent(self, event):
#Do other thing
QtGui.QGraphicsItem.mousePressEvent(self, event)
def boundingRect(self):
return QtCore.QRectF(self.x, self.y, 25, 25)
def paint(self, painter, option, widget):
painter.setPen(QtGui.QPen(QtGui.QColor(0, 255, 0), 1))
painter.drawEllipse(self.x, self.y, 25, 25)
あなたは私をもっとよく説明できますか? – eyllanesc
子を表示するには、親のQGraphicsItemペイントメソッドで何もする必要はありません。これは独自のペイント方法で処理されます。親メソッドの__init__methodに子アイテムを追加します。ペイントメソッドは追加しません。それ以外の場合は、paint()が呼び出されるたびに新しい子が追加されます。 –
@SimonHibbsありがとうございました。解決策は、__init__メソッドでtextComponent.setParentItem(self)とellipseComponent.setParentItem(self)を呼び出すことでした。 –