数据类型转换
在使用这一段时间中,数据类型太多了,很多都需要转换。本章为总结。
C++强制转换有四种
1 | static_cast<>() |
static_cast 基本数据的转换、空指针与指针之间的转换
目前使用于信号槽函数强制转换,基于QT5的新特性,在使用connect时,第二第四个参数产生的为&className::functionName,如果函数被重载了,QT无法判断需要使用哪个信号,即使你的槽函数设置对应的参数,这里需要对第二个参数进行强制转换,如下。
static_cast<void (className::*)(parameter)>(&className::functionName)
这样可以将函数进行强制转换,解决信号定位的问题。dynamic_cast<>() 类的下行转换,由基数向派生类转换
目前没有使用过
const_cast<>() 去掉const或者volatile属性
1
2const char *cstr="rts";
char *str=const_cast<char *>(cstr);reinterpret_cast<>() 主要将数据从一种类型转换为另一种类型,二进制的形式重新解释
在使用windows api的时候,需要使用宽字符wcahr_t,而qt里面没有原这样的类型,但是qstring有转换成宽字符的函数,操作如下
1
2QString str;
reinterpret_cast<const wchar_t *>(str.utf16());
百度百科介绍,static_cast
进行类的转换,会进行实际的偏移,而reinterpret_cast
不会
qobject_cast(QObject *object)
该转换只适用于继承自object的派生类,且类中带有Q_OBJECT宏声明。
用于将一个QObject对象转换为对应的派生类,如果类型不符合,则转换为0;
sender为槽对象,默认是QObject类型 在这里,如果有多个不同的信号对应同一个槽,可以根据该转换来判断传递对象的类型,像这里,如果sender是QLabel则会转换成功,否则为空
1
qobject_cast<QLabel *>(sender());
qgraphicsitem_cast
qvariant_cast
本文标题:数据类型转换
文章作者:whppmy
发布时间:2019-01-15
最后更新:2019-01-15
原始链接:http://bugnull.com/C/数据类型转换/
版权声明:个人记录,没有获取同意时,禁止转载!!