今天项目中发现一个问题,我定义了两个类型的图形项A类和B类,都是继承QGraphicsObject。
在场景中获取选中的图形项:
QList<QGraphicsItem *> list = deviceGraphicsScene->selectedItems();
当要判断类型时:
QGraphicsItem * item = list.first();
if(A* deviceItem = static_cast<A*>(item))
{
...
}
if(B* deviceItem = static_cast<B*>(item))
{
...
}
发现不管实际上是A类对象还是B类对象,都可以成功强制转成A和B,上面两个if条件都成立.....
处理:不要使用static_cast,改成dynamic_cast转换就正常了。
更新:
更好的方法,重写图形项的type()方法:
enum {Type = UserType + 22};
int type() const Q_DECL_OVERRIDE
{
return Type;
}
然后用转换图形项专用的转换方式做转换:
qgraphicsitem_cast
qgraphicsitem_cast实际上就是根据type()的值来判断图形项类型的。