QT:qobject_cast有问题
|
我派生了QGraphicsItem和QGraphicsScene类。我希望项目能够调用scene()并获得derviedGraphicsItem *而不是QGraphicsItem *,所以我重新实现了QGraphicsScene :: itemAt以返回派生的指针。
DerivedItem* DerivedScene::itemAt( const QPointF &position, const QTransform &dt ) const
{
return qobject_cast< DerivedItem * >(
QGraphicsScene::itemAt(position, dt) );
}
我收到以下错误(Qt 4.6,Ubuntu 10.4上的GCC 4.4.3)
scene.cpp: In member function ‘DerivedItem* DerivedScene::itemAt(qreal, qreal, const QTransform&) const’:
scene.cpp:28: error: no matching function for call to ‘qobject_cast(QGraphicsItem*)’
然后我注意到QGraphicsItem不继承QObject,所以我使派生的QGraphicsItem类具有从QObject和QGraphicsItem的多重继承,并且在添加Q_OBJECT宏并重建项目后,我得到了相同的错误。
我会以错误的方式处理吗?我知道尝试将父类强制转换为子级应该是一个糟糕的设计,但是在这种情况下,这似乎是我想要的,因为我的派生项类具有新功能,并且其对象需要一种调用该类的方法在自己周围的项目上添加新功能,并用itemAt()询问项目场景对象似乎是最好的方法-但我需要itemAt()返回正确类型的指针。我可以通过使用Dynamic_cast使派生项转换QGraphicsScene :: itemAt()返回的QGraphicsItem *来解决此问题,但我并不真正理解为什么它起作用而不是qobject_cast,或者我不了解使用dynamic_cast vs.的利弊。 qobject_cast。
编辑:
忘了提一下,我还在派生类中重新实现了QGraphicsItem :: scene(),以返回DerivedScene *,如下
DerivedScene* DerivedItem::scene() const
{
return qobject_cast< DerivedScene * >( QGraphicsItem::scene() );
}
但这似乎并没有导致编译错误...
没有找到相关结果
已邀请:
2 个回复
漂汀拦
亲奋漏