QGraphicsScene::itemAt() - 如何识别自定义类

3

我有一个小问题

我正在编写Petri网模拟器...

我有两个不同的类

    class PNItem : public QObject, public QGraphicsItem
    ...

并且

    class PNEdge : public QGraphicsLineItem

当我调用...

    QGraphicsItem *QGraphicsScene::ItemAt(//cursor position)

有没有办法知道我点击了哪个项目?或者ItemAt给定哪个项目?与此相关的技术是IT技术。

2个回答

4

由于您只有两种类型,因此可以使用dynamic_cast,并检查转换是否成功:

QGraphicsItem *item = scene->ItemAt(pos);
PNEdge *as_pnedge;
PNItem *as_pnitem;
if((as_pnedge = dynamic_cast<PNEdge*>(item))){
    // do stuff with as_pnedge
}else if((as_pnitem = dynamic_cast<PNItem*>(item))){
    // do stuff with as_pnitem
}

4

GraphicsItem::type()旨在用于解决这个问题。

例如,您可以执行以下操作:

enum ItemType { TypePNItem = QGraphicsItem::UserType + 1,
                TypePNEdge = QGraphicsItem::UserType + 2 }

class PNItem : public QObject, public QGraphicsItem {

    public:
        int type() { return TypePNItem; }
    ...

};

这将使您能够执行以下操作:
QGraphicsItem *item = scene->itemAt( x, y );
switch( item->type() )
{
    case PNItem:
         ...
         break;
}

这样做还可以使用qgraphicsitem_cast

另请参阅:QGraphicsItem :: UserType


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接