• 152阅读
  • 1回复

[原创]qobject_cast转换为基类类型闹鬼事件,为什么会返回Null呢? [复制链接]

上一主题 下一主题
离线shixingya
 

只看楼主 倒序阅读 楼主  发表于: 01-09

下面的问题原因Get了 如果既是QObject派生类,又用Q_DECLARE_INTERFACE声明为接口,用qobject_cast是会有问题的 ,用dynamic_cast 就不会有问题,如果非要用qobject_cast,则参考代码
  1. #undef Q_DECLARE_INTERFACE
  2. #define Q_DECLARE_INTERFACE(IFace, IId) \
  3.     template <> inline IFace *qobject_cast<IFace *>(QObject *object) \
  4.     {IFace * face = reinterpret_cast<IFace *>((object ? object->qt_metacast(IId) : 0)); \
  5.     return face ? face : static_cast<IFace*>(reinterpret_cast<IFace*>(object)->staticMetaObject.cast(object));}


参考自 https://www.it610.com/article/4104865.htm



图中DrawToolInterface是基类,而且声明了接口类型,所以会有以上问题。
自2012年接触QT以来,写QT一直是我每天的工作,这些年在中国运载火箭技术研究院、国美电器、启明星辰、广联达等公司工作过,为军工科研、政府项目、电商项目、在线教育用Qt开发过多个的工具或系统,也接触过中科方德Linux、Mac Qt、Windows Qt, 有同行的朋友,可以加我微信,一起进步
我叫史星亚 微信: EagleAndy  
加好友时请备注  来自qtcn
我有个Qt交友群,拉您入群
非工作时间 可以电联 18610042411
离线shixingya

只看该作者 1楼 发表于: 01-09
自2012年接触QT以来,写QT一直是我每天的工作,这些年在中国运载火箭技术研究院、国美电器、启明星辰、广联达等公司工作过,为军工科研、政府项目、电商项目、在线教育用Qt开发过多个的工具或系统,也接触过中科方德Linux、Mac Qt、Windows Qt, 有同行的朋友,可以加我微信,一起进步
我叫史星亚 微信: EagleAndy  
加好友时请备注  来自qtcn
我有个Qt交友群,拉您入群
非工作时间 可以电联 18610042411
快速回复
限100 字节
 
上一个 下一个