我有一个小问题

我正在编程 Petri Net 模拟器...

我有两个不同的类(class)

    class PNItem : public QObject, public QGraphicsItem
    ...


    class PNEdge : public QGraphicsLineItem

当我打电话...
    QGraphicsItem *QGraphicsScene::ItemAt(//cursor position)

,是否有可能以某种方式知道我点击了什么项目?分别ItemAt 给了什么项目?

最佳答案

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

关于qt - QGraphicsScene::itemAt() - 如何识别自定义类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10114812/

10-16 02:24