关于“itemChange()”的问题QGraphicsItem 的
在 itemChange 的函数中,首先,我获取将要添加的子项,然后使用dynamic_cast将其转换为“MyItem”,但转换总是失败。
QVariant MyItem::itemChange ( GraphicsItemChange change, const QVariant & value )
{
if (change==ItemChildAddedChange)
{
QGraphicsItem* item=value.value<QGraphicsItem*>();
if (item)
{
MyItem* myItem=dynamic_cast<MyItem*>(item);//myItem always be NULL,
//although I know the item is 'MyItem' type.
if (myItem)
{
qDebug()<<"successful!";
}
}
}
return QGraphicsItem::itemChange(change,value);
}
非常感谢!
In the function of itemChange, first ,I get the child item that will be added, then I use dynamic_cast cast it to 'MyItem', but the cast always fail.
QVariant MyItem::itemChange ( GraphicsItemChange change, const QVariant & value )
{
if (change==ItemChildAddedChange)
{
QGraphicsItem* item=value.value<QGraphicsItem*>();
if (item)
{
MyItem* myItem=dynamic_cast<MyItem*>(item);//myItem always be NULL,
//although I know the item is 'MyItem' type.
if (myItem)
{
qDebug()<<"successful!";
}
}
}
return QGraphicsItem::itemChange(change,value);
}
Thanks very much!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
请注意
itemChange
上的注释:如果对象未完全构造,
dynamic_cast
也可能失败。 (我不太明白这方面的规范,但在某些情况下会,有些情况下不会。)如果您在构建项目之后设置父项,它将起作用:Note the comment on
itemChange
:dynamic_cast
can also fail if the object is not fully constructed. (I don't quite understand the spec on this, but there are some cases where it will, some where it will not.) If you set the parent after constructing the item, it will work:尝试使用 qgraphicsitem_cast
Try using qgraphicsitem_cast