对于Qt项目开发中,常常会遇到QString和const char*的转化问题,Qt也提供了响应的API接口,可以把QString转化为QByteArray,然后再转化为const char *,具体代码如下:
QString string("helloWorld");
const char *str = string.toLatin1().data();
但是调用接口才发现,打印str时有时能够显示得到helloWorld有时候得到的却是乱码,通过查询文档发现调用toLatin1的过程中是把QString中的内容放到QByteArray中存储起来,如果再调用data的接口,放到QByteArray中的数据则会被清除(类似于栈变量析构),因此将上述代码变化一下则可以正确转化:
QString string("helloWorld");
QByteArray array = string.toLatin1();
const char *str = array.data();
但是存在一个问题,如果是这样的场景,如果const char*存在的生命周期比QByteArray要长的话,还是会出现const char*中的数据会被释放,const char*的数据乱码的情况,解决的方法可以额外深拷贝出一份数据保存下来或者用一个数组保存数据(如果是在对象中,将数组定义成成员变量就行了)