在做Qt方面的项目的时候,遇到了QString转std::string的问题,查了一下Qt的Assistant,找到这个函数:std::string QString::toStdString () const,拿来实现一下,OK,不由感慨一下,Qt还是真是强大,居然考虑到这么周到。
就这样,一直用下去,等到马上要给领导看到的时候想起来这段时间一直在debug下开发和测试程序,一直没有在release下运行下,于是马上生成一个release版本的程序,打开程序,不到两秒钟,死掉了,重启,还是这样,意识到自己犯了一个很大的错误,但是临近了检查就先debug下运行吧,后续再查找原因。
领导检查完毕之后,赶紧网上查找解决release下问题的方法,原来还可以将release设置成可调试模式,各种设置之后,单步调试之后发现,就是这个QString转string出了问题,但是怎么在debug下怎么没有这样的问题呢,自己猜测是编码的不同的原因,release下也简化了编码方式,导致了在release模式下,两者的编码方式不一样,既然问题出来了,就得想出来解决办法吧,从最基本的方法做起,把QString先转换成char*,然后将char*转换成string,代码实现如下:
QString folderPathQt = "C:\ssss";
QByteArray arrays = folderPathQt.toAscii();
char *str_c = arrays.data();
string folderPath = string(str_c);
程序跑起来测试一下,正确,搞定!
但是为什么会有这种问题呢?上网搜一下,有人已经写出了这个QString与string之间的转换问题,通过这个代码可以知道,确实是编码原因。
QString和string的转换我在这就写了,这篇文章中讲得很清楚了。值得一说的是开发人员平时要注意的事情,就是在debug下做开发,debug下运行没问题,一定要在release下运行,看是否正确,这个是一个好的习惯,网上已经很多大牛都这样说,不过虽然遇到这个问题花费了一些功夫,但是好事多磨,有了这次教训,以后就注意了。