Qt QGraphicscene::itemAt()-如何识别自定义类
我有一个小问题 我正在编写Petri网模拟器 我有两门不同的课Qt QGraphicscene::itemAt()-如何识别自定义类,qt,qgraphicsscene,Qt,Qgraphicsscene,我有一个小问题 我正在编写Petri网模拟器 我有两门不同的课 class PNItem : public QObject, public QGraphicsItem ... 及 当我打电话 QGraphicsItem *QGraphicsScene::ItemAt(//cursor position) ,是否有可能知道我点击了什么项目?分别。什么项目是逐项指定的?由于您只有两种类型,您可以使用动态\u casting,并检查强制转换是否成功: QGraphicsIt
class PNItem : public QObject, public QGraphicsItem
...
及
当我打电话
QGraphicsItem *QGraphicsScene::ItemAt(//cursor position)
,是否有可能知道我点击了什么项目?分别。什么项目是逐项指定的?由于您只有两种类型,您可以使用
动态\u cast
ing,并检查强制转换是否成功:
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
}
QGraphicsItem*item=scene->ItemAt(pos);
PNEdge*作为_PNEdge;
PNItem*作为\u PNItem;
如果((as_pnedge=动态施法(项目))){
//用as_pnedge做一些事情
}如果((as_pnitem=dynamic_cast(item))){
//用as_pnitem做一些事情
}
旨在解决此问题
所以你可以这样做,例如:
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 *item = scene->itemAt( x, y );
switch( item->type() )
{
case PNItem:
...
break;
}