• 5689阅读
  • 5回复

[提问]怎样写qmake或者make来让Qt程序支持RTTI? [复制链接]

上一主题 下一主题
离线彩阳
 

只看楼主 倒序阅读 楼主  发表于: 2013-03-29
如题,由于某种原因,无法使用qobject_cast,只能使用dynamic_cast,需要RTTI的支持。请问该如何做?编译器是g++。
上海Qt开发联盟,热忱地欢迎你的加入!
离线lcl_data
只看该作者 1楼 发表于: 2013-03-29
问问
离线novesky

只看该作者 2楼 发表于: 2013-03-29
默认是开启的吧,不行的话configure 加上-rtti
离线彩阳

只看该作者 3楼 发表于: 2013-03-30
回 1楼(lcl_data) 的帖子
我说的RTTI不是Qt这么实现的,Qt自有元对象系统,可以说是对C++不完整动态联编的一种补充吧。
而这里的RTTI是指C++的,通过关键字typeinfo和dynamic_cast来实现对对象指针的正确访问。
上海Qt开发联盟,热忱地欢迎你的加入!
离线彩阳

只看该作者 4楼 发表于: 2013-03-30
回 2楼(novesky) 的帖子
MinGW的g++默认是关闭的,而且Qt自称拥有元对象系统,不用C++的RTTI。
但是不是Qt的类就不行了,要想对C++不完整的动态联编进行补充,只能使用RTTI,要么就必须改源代码。
目前的一个办法就是在Makefile.Debug或Makefile.Release中将-fno-rtti改为-frtti。但是我想能否在pro文件中指定呢?
目前在/mkspecs/win32-g++/qmake.conf中找到了两个标识符:
QMAKE_CXXFLAGS_RTTI_ON和QMAKE_CXXFLAGS_RTTI_OFF
但我在pro文件中使用,还是出错。
出错的提示是这样的:
c:\Programming\Qt4.8.3\src\corelib\global\qglobal.h:2505: 错误:'dynamic_cast_will_always_fail_because_rtti_is_disabled' is not a member of 'GameObject*'
上海Qt开发联盟,热忱地欢迎你的加入!
离线novesky

只看该作者 5楼 发表于: 2013-03-30
回 4楼(彩阳) 的帖子
你的Qt必须重新编译,configure的时候加上-rtti,不然dynamic_cast在qglobal.h里被一个宏替换掉了引发编译错误.
或者你修改Qt安装目录下的mkspecs/qconfig.pri, 在最后加上
CONFIG-=rtti_off
CONFIG+=rtti
这个方法我没试过,也许可以
快速回复
限100 字节
 
上一个 下一个