シーンに好きなだけ項目を追加できます (もちろん、空きメモリ領域がある限り):
myGraphicsScene->addEllipse(rect, pen, brush);
クリックごとにアイテムを追加するには、 の を再実装しmousePressEvent
ますQGraphicsView
。
void MyGraphicsView::mousePressEvent(QMouseEvent *e)
{
int rx = 10; // radius of the ellipse
int ry = 20;
QRect rect(e->x() - rx, e->y() - ry, 2*rx, 2*ry);
scene()->addEllipse(rect, pen, brush);
// call the mousePressEvent of the super class:
QGraphicsView::mousePressEvent(e);
}
自分でポインタを保存する必要はありません。シーン内のすべてのアイテムの一部の情報を照会する場合は、シーンによって提供されるアイテムのリストをループするだけです。
foreach(QGraphicsItem *item, myGraphicsScene->items())
qDebug() << "Item geometry =" << item->boundingRect();
(またはポジションのみ: item->pos()
)
のサブクラスの情報を照会する場合はQGraphicsItem
、Qt の QGraphicsItem キャスト メカニズムを使用して項目を自分の型にキャストできます。このメカニズムは、項目が要求された型でない場合に null ポインターを返します。ポインターが null でないことを確認したら、独自のメンバーにアクセスできます。
foreach(QGraphicsItem *item, myGraphicsScene->items())
{
MyDerivedItem *derivedItem = qgraphicsitem_cast<MyDerivedItem*>(item);
if(derivedItem) // check success of QGraphicsItem cast
qDebug() << derivedItem->yourCustomMethod();
}