我正在阅读其他人的代码并看到这个:
class UAVItem:public QObject,public QGraphicsItem { Q_OBJECT Q_INTERFACES(QGraphicsItem) ...
但我没有看到他们在这个程序中使用任何类型的插件.因此,我可以删除该行:
Q_INTERFACES(QGraphicsItem)
?
如果你有一个类Derived
从一个类继承Base
,这反过来从继承QObject
,都Derived
和Base
包含Q_OBJECT
宏,则qobject_cast
可以用来安全地从一个指针(或引用)投Base
,一个指针(或引用)Derived
,类似以dynamic_cast
在标准C++但不RTTI.
如果Base
确实没有继承QObject
,则qobject_cast
仍可以以这种方式使用,但只有当Base
具有相应的Q_DECLARE_INTERFACE
宏观和Derived
包含Q_INTERFACES(Base)
.
在你的情况,Q_INTERFACES(QGraphicsItem)
在存在UAVItem
该装置qobject_cast
可被用于从一个指针(或参考)转换为QGraphicsItem
一个指针(或引用)UAVItem
,尽管QGraphicsItem
未继承QObject
.